update pieces for #5647

full-remote-socket
Thibault Duplessis 2019-11-25 14:26:16 -06:00
parent 4a1234deb7
commit bba93795fe
50 changed files with 932 additions and 1907 deletions

View File

@ -19,8 +19,7 @@ object Dev extends LilaController {
Env.report.slackScoreThresholdSetting,
Env.streamer.alwaysFeaturedSetting,
Env.rating.ratingFactorsSetting,
Env.plan.donationGoalSetting,
Env.round.remoteSocketSetting
Env.plan.donationGoalSetting
)
def settings = Secure(_.Settings) { implicit ctx => me =>

View File

@ -17,47 +17,6 @@ object Round extends LilaController with TheftPrevention {
private def env = Env.round
private def analyser = Env.analyse.analyser
def websocketWatcher(gameId: String, color: String, apiVersion: Int) = SocketOption[JsValue] { implicit ctx =>
proxyPov(gameId, color) flatMap {
_ ?? { pov =>
getSocketSri("sri") ?? { sri =>
val userTv = get("userTv") map UserModel.normalize map { userId =>
lila.round.actorApi.UserTv(
userId,
pov.game.finishedOrAborted ?? GameRepo.lastPlayedPlayingId(userId).map(_.isDefined)
)
}
env.socketHandler.watcher(
pov = pov,
sri = sri,
user = ctx.me,
ip = ctx.ip,
userTv = userTv,
version = getSocketVersion,
apiVersion = apiVersion,
mobile = getMobile
) map some
}
}
}
}
def websocketPlayer(fullId: String, apiVersion: Int) = SocketEither[JsValue] { implicit ctx =>
env.proxy.pov(fullId) flatMap {
case Some(pov) =>
if (isTheft(pov)) fuccess(Left(theftResponse))
else getSocketSri("sri") match {
case Some(sri) =>
requestAiMove(pov) >>
env.socketHandler.player(pov, sri, ctx.me, ctx.ip, getSocketVersion, apiVersion, getMobile) map Right.apply
case None => fuccess(Left(NotFound))
}
case None => fuccess(Left(NotFound))
}
}
private def requestAiMove(pov: Pov) = pov.game.playableByAi ?? Env.fishnet.player(pov.game)
private def renderPlayer(pov: Pov)(implicit ctx: Context): Fu[Result] = negotiate(
html = if (!pov.game.started) notFound
else PreventTheft(pov) {

View File

@ -184,10 +184,6 @@ GET /streamer/:username controllers.Streamer.show(username: Strin
GET /$gameId<\w{8}> controllers.Round.watcher(gameId: String, color: String = "white")
GET /$gameId<\w{8}>/$color<white|black> controllers.Round.watcher(gameId: String, color: String)
GET /$fullId<\w{12}> controllers.Round.player(fullId: String)
# mobile app BC
GET /$gameId<\w{8}>/$color<white|black>/socket controllers.Round.websocketWatcher(gameId: String, color: String, apiVersion: Int = 3)
GET /$gameId<\w{8}>/$color<white|black>/socket/v:apiVersion controllers.Round.websocketWatcher(gameId: String, color: String, apiVersion: Int)
GET /$fullId<\w{12}>/socket/v:apiVersion controllers.Round.websocketPlayer(fullId: String, apiVersion: Int)
GET /$gameId<\w{8}>/$color<white|black>/sides controllers.Round.sides(gameId: String, color: String)
GET /$gameId<\w{8}>/continue/:mode controllers.Round.continue(gameId: String, mode: String)
GET /$gameId<\w{8}>/note controllers.Round.readNote(gameId: String)

View File

@ -64,29 +64,6 @@ final class Env(
private val deployPersistence = new DeployPersistence(system)
private lazy val roundDependencies = RoundDuct.Dependencies(
messenger = messenger,
takebacker = takebacker,
moretimer = moretimer,
finisher = finisher,
rematcher = rematcher,
player = player,
drawer = drawer,
forecastApi = forecastApi,
socketMap = socketMap
)
private val roundMap = new lila.hub.DuctMap[RoundDuct](
mkDuct = id => {
val duct = new RoundDuct(
dependencies = roundDependencies,
gameId = id
)(new GameProxy(id, deployPersistence.isEnabled, system.scheduler))
duct.getGame foreach { _ foreach scheduleExpiration }
duct
},
accessTimeout = ActiveTtl
)
private val defaultGoneWeight = fuccess(1f)
private def goneWeight(userId: User.ID): Fu[Float] = playban.getRageSit(userId).dmap(_.goneWeight)
private def goneWeightsFor(game: Game): Fu[(Float, Float)] =
@ -94,9 +71,9 @@ final class Env(
else game.whitePlayer.userId.fold(defaultGoneWeight)(goneWeight) zip
game.blackPlayer.userId.fold(defaultGoneWeight)(goneWeight)
lazy val roundSocket = new RoundRemoteSocket(
lazy val roundSocket = new RoundSocket(
remoteSocketApi = remoteSocketApi,
roundDependencies = RoundRemoteDuct.Dependencies(
roundDependencies = RoundDuct.Dependencies(
messenger = messenger,
takebacker = takebacker,
moretimer = moretimer,
@ -113,7 +90,6 @@ final class Env(
selfReport = selfReport,
messenger = messenger,
goneWeightsFor = goneWeightsFor,
useRemoteSocket = useRemoteSocket _,
system = system
)
@ -122,9 +98,7 @@ final class Env(
case Tell(id, msg) => tellRound(id, msg)
},
'roundMapTellAll -> {
case msg =>
roundMap.tellAll(msg)
roundSocket.rounds.tellAll(msg)
case msg => roundSocket.rounds.tellAll(msg)
},
'accountClose -> {
case lila.hub.actorApi.security.CloseAccount(userId) => GameRepo.allPlaying(userId) map {
@ -142,28 +116,14 @@ final class Env(
def count = nbRounds
system.scheduler.schedule(5 seconds, 2 seconds) {
nbRounds = roundMap.size + roundSocket.rounds.size
bus.publish(lila.hub.actorApi.round.NbRounds(nbRounds), 'nbRounds)
bus.publish(lila.hub.actorApi.round.NbRounds(roundSocket.rounds.size), 'nbRounds)
}
import lila.memo.SettingStore.Regex._
lazy val remoteSocketSetting = settingStore[scala.util.matching.Regex](
"roundRemoteSocket5",
default = "[0-9a-u].+".r,
text = "Remote socket game ID regex".some
)
def useRemoteSocket(gameId: Game.ID) = remoteSocketSetting.get().matches(gameId)
def selectRoundMap(gameId: Game.ID) = if (useRemoteSocket(gameId)) roundSocket.rounds else roundMap
def tellRound(gameId: Game.ID, msg: Any): Unit = selectRoundMap(gameId).tell(gameId, msg)
def tellRound(gameId: Game.ID, msg: Any): Unit = roundSocket.rounds.tell(gameId, msg)
object proxy {
def game(gameId: Game.ID): Fu[Option[Game]] = Game.validId(gameId) ?? {
if (useRemoteSocket(gameId)) roundSocket getGame gameId
else roundMap.getOrMake(gameId).getGame addEffect { g =>
if (!g.isDefined) roundMap kill gameId
}
}
def game(gameId: Game.ID): Fu[Option[Game]] = Game.validId(gameId) ?? roundSocket.getGame(gameId)
def pov(gameId: Game.ID, user: lila.user.User): Fu[Option[Pov]] =
game(gameId) map { _ flatMap { Pov(_, user) } }
@ -176,14 +136,11 @@ final class Env(
def pov(playerRef: PlayerRef): Fu[Option[Pov]] =
game(playerRef.gameId) map { _ flatMap { _ playerIdPov playerRef.playerId } }
def gameIfPresent(gameId: Game.ID): Fu[Option[Game]] =
if (useRemoteSocket(gameId)) roundSocket gameIfPresent gameId
else roundMap.getIfPresent(gameId).??(_.getGame)
def gameIfPresent(gameId: Game.ID): Fu[Option[Game]] = roundSocket gameIfPresent gameId
def updateIfPresent(game: Game): Fu[Game] =
if (game.finishedOrAborted) fuccess(game)
else if (useRemoteSocket(game.id)) roundSocket updateIfPresent game
else roundMap.getIfPresent(game.id).fold(fuccess(game))(_.getGame.map(_ | game))
else roundSocket updateIfPresent game
def povIfPresent(gameId: Game.ID, color: chess.Color): Fu[Option[Pov]] =
gameIfPresent(gameId) map2 { (g: Game) => Pov(g, color) }
@ -209,19 +166,6 @@ final class Env(
}
}
val socketMap = SocketMap.make(
makeHistory = History(db(CollectionHistory), deployPersistence.isEnabled _) _,
socketTimeout = SocketTimeout,
dependencies = RoundSocket.Dependencies(
system = system,
lightUser = lightUser,
sriTtl = SocketSriTimeout,
getGame = proxy.game _
),
playban = playban,
useRemoteSocket = useRemoteSocket _
)
lazy val selfReport = new SelfReport(tellRound, slackApi, proxy.pov)
lazy val recentTvGames = new {
@ -234,17 +178,6 @@ final class Env(
}
}
lazy val socketHandler = new SocketHandler(
hub = hub,
roundMap = roundMap,
socketMap = socketMap,
messenger = messenger,
evalCacheHandler = evalCacheHandler,
selfReport = selfReport,
bus = bus,
isRecentTv = recentTvGames get _
)
private lazy val botFarming = new BotFarming(crosstableApi, isBotSync)
lazy val perfsUpdater = new PerfsUpdater(historyApi, rankingApi, botFarming, ratingFactors)
@ -300,16 +233,10 @@ final class Env(
)
def getSocketStatus(game: Game): Fu[SocketStatus] =
if (useRemoteSocket(game.id))
roundSocket.rounds.ask[SocketStatus](game.id)(GetSocketStatus)
else
socketMap.ask[SocketStatus](game.id)(GetSocketStatus)
roundSocket.rounds.ask[SocketStatus](game.id)(GetSocketStatus)
private def isUserPresent(game: Game, userId: lila.user.User.ID): Fu[Boolean] =
if (useRemoteSocket(game.id))
roundSocket.rounds.askIfPresentOrZero[Boolean](game.id)(HasUserId(userId, _))
else
socketMap.ask[Boolean](game.id)(HasUserId(userId, _))
roundSocket.rounds.askIfPresentOrZero[Boolean](game.id)(HasUserId(userId, _))
lazy val jsonView = new JsonView(
noteApi = noteApi,
@ -322,8 +249,7 @@ final class Env(
evalCache = evalCache,
isOfferingRematch = rematcher.isOffering,
baseAnimationDuration = AnimationDuration,
moretimeSeconds = MoretimeDuration.toSeconds.toInt,
useRemoteSocket = useRemoteSocket _
moretimeSeconds = MoretimeDuration.toSeconds.toInt
)
lazy val noteApi = new NoteApi(db(CollectionNote))

View File

@ -27,8 +27,7 @@ final class JsonView(
evalCache: lila.evalCache.EvalCacheApi,
isOfferingRematch: Pov => Boolean,
baseAnimationDuration: Duration,
moretimeSeconds: Int,
useRemoteSocket: Game.ID => Boolean
moretimeSeconds: Int
) {
import JsonView._
@ -80,10 +79,7 @@ final class JsonView(
}.add("isGone" -> (!opponent.isAi && socket.isGone(opponent.color)))
.add("onGame" -> (opponent.isAi || socket.onGame(opponent.color))),
"url" -> Json.obj(
"socket" -> {
if (useRemoteSocket(game.id)) s"/play/$fullId/v$apiVersion"
else s"/$fullId/socket/v$apiVersion"
},
"socket" -> s"/play/$fullId/v$apiVersion",
"round" -> s"/$fullId"
),
"pref" -> Json.obj(
@ -172,10 +168,7 @@ final class JsonView(
"opponent" -> commonWatcherJson(game, opponent, opponentUser, withFlags).add("onGame" -> (opponent.isAi || socket.onGame(opponent.color))),
"orientation" -> pov.color.name,
"url" -> Json.obj(
"socket" -> {
if (useRemoteSocket(game.id)) s"/watch/$gameId/${color.name}/v$apiVersion"
else s"/$gameId/${color.name}/socket/v$apiVersion"
},
"socket" -> s"/watch/$gameId/${color.name}/v$apiVersion",
"round" -> s"/$gameId/${color.name}"
),
"pref" -> Json.obj(

View File

@ -0,0 +1,38 @@
package lila.round
import scala.concurrent.duration._
import akka.actor._
import akka.pattern.{ ask, pipe }
import chess.{ Color, White, Black, Speed }
import play.api.libs.iteratee._
import play.api.libs.json._
import actorApi._
import lila.chat.Chat
import lila.common.LightUser
import lila.game.actorApi.{ StartGame, UserStartGame }
import lila.game.{ Game, Event }
import lila.hub.actorApi.Deploy
import lila.hub.actorApi.round.{ IsOnGame, TourStandingOld }
import lila.hub.actorApi.simul.GetHostIds
import lila.hub.Trouper
import lila.socket._
import lila.socket.actorApi.{ Connected => _, _ }
import lila.socket.Socket
import lila.user.User
import makeTimeout.short
object OldRoundSocket {
case class ChatIds(priv: Chat.Id, pub: Chat.Id) {
def all = Seq(priv, pub)
}
private[round] case class Dependencies(
system: ActorSystem,
lightUser: LightUser.Getter,
sriTtl: FiniteDuration,
getGame: Game.ID => Fu[Option[Game]]
)
}

View File

@ -24,7 +24,7 @@ private[round] final class Player(
private case object Flagged extends MoveResult
private case class MoveApplied(progress: Progress, move: MoveOrDrop) extends MoveResult
private[round] def human(play: HumanPlay, round: AnyRoundDuct)(pov: Pov)(implicit proxy: GameProxy): Fu[Events] = play match {
private[round] def human(play: HumanPlay, round: RoundDuct)(pov: Pov)(implicit proxy: GameProxy): Fu[Events] = play match {
case p @ HumanPlay(playerId, uci, blur, lag, promiseOption) => pov match {
case Pov(game, _) if game.turns > Game.maxPlies =>
round ! TooManyPlies
@ -46,7 +46,7 @@ private[round] final class Player(
}
}
private[round] def bot(play: BotPlay, round: AnyRoundDuct)(pov: Pov)(implicit proxy: GameProxy): Fu[Events] = play match {
private[round] def bot(play: BotPlay, round: RoundDuct)(pov: Pov)(implicit proxy: GameProxy): Fu[Events] = play match {
case p @ BotPlay(playerId, uci, promiseOption) => pov match {
case Pov(game, _) if game.turns > Game.maxPlies =>
round ! TooManyPlies
@ -68,7 +68,7 @@ private[round] final class Player(
}
private def postHumanOrBotPlay(
round: AnyRoundDuct,
round: RoundDuct,
pov: Pov,
progress: Progress,
moveOrDrop: MoveOrDrop,
@ -90,7 +90,7 @@ private[round] final class Player(
res >>- promiseOption.foreach(_.success(()))
}
private[round] def fishnet(game: Game, ply: Int, uci: Uci, round: AnyRoundDuct)(implicit proxy: GameProxy): Fu[Events] =
private[round] def fishnet(game: Game, ply: Int, uci: Uci, round: RoundDuct)(implicit proxy: GameProxy): Fu[Events] =
if (game.playable && game.player.isAi && game.playedTurns == ply) {
applyUci(game, uci, blur = false, metrics = fishnetLag)
.fold(errs => fufail(ClientError(errs.shows)), fuccess).flatMap {
@ -105,7 +105,7 @@ private[round] final class Player(
}
} else fufail(FishnetError(s"Not AI turn move: ${uci} id: ${game.id} playable: ${game.playable} player: ${game.player}"))
private[round] def requestFishnet(game: Game, round: AnyRoundDuct): Funit = game.playableByAi ?? {
private[round] def requestFishnet(game: Game, round: RoundDuct): Funit = game.playableByAi ?? {
if (game.turns <= fishnetPlayer.maxPlies) fishnetPlayer(game)
else fuccess(round ! actorApi.round.ResignAi)
}

View File

@ -1,55 +1,220 @@
package lila.round
import akka.actor._
import akka.pattern.ask
import play.api.libs.json._
import org.joda.time.DateTime
import ornicar.scalalib.Zero
import scala.concurrent.duration._
import ornicar.scalalib.Zero
import actorApi._, round._
import chess.Color
import lila.game.{ Game, Progress, Pov, Event, Source, Player => GamePlayer }
import chess.{ Color, White, Black, Speed }
import lila.chat.Chat
import lila.game.actorApi.UserStartGame
import lila.game.Game.{ PlayerId, FullId }
import lila.game.{ Game, Progress, Pov, Event, Source, Player => GamePlayer }
import lila.hub.actorApi.DeployPost
import lila.hub.actorApi.map._
import lila.hub.actorApi.round.{ FishnetPlay, FishnetStart, BotPlay, RematchYes, RematchNo, Abort, Resign }
import lila.hub.actorApi.round.{ FishnetPlay, FishnetStart, BotPlay, RematchYes, RematchNo, Abort, Resign, IsOnGame }
import lila.hub.actorApi.simul.GetHostIds
import lila.hub.actorApi.socket.HasUserId
import lila.hub.Duct
import lila.room.RoomSocket.{ Protocol => RP, _ }
import lila.socket.RemoteSocket.{ Protocol => P, _ }
import lila.socket.Socket.{ Sri, SocketVersion, GetVersion, makeMessage }
import lila.socket.UserLagCache
import makeTimeout.large
trait AnyRoundDuct extends Duct
import lila.user.User
private[round] final class RoundDuct(
dependencies: RoundDuct.Dependencies,
gameId: Game.ID
)(implicit proxy: GameProxy) extends AnyRoundDuct {
gameId: Game.ID,
socketSend: String => Unit
)(implicit proxy: GameProxy) extends Duct {
import RoundSocket.Protocol
import RoundDuct._
import dependencies._
private[this] var takebackSituation: Option[TakebackSituation] = None
private var takebackSituation: Option[TakebackSituation] = None
private var version = SocketVersion(0)
private var mightBeSimul = true // until proven false
private var gameSpeed: Option[Speed] = none
private var chatIds = ChatIds(
priv = Left(Chat.Id(gameId)), // until replaced with tourney/simul chat
pub = Chat.Id(s"$gameId/w")
)
private final class Player(color: Color) {
private var offlineSince: Option[Long] = nowMillis.some
// wether the player closed the window intentionally
private var bye: Boolean = false
// connected as a bot
private var botConnected: Boolean = false
var userId = none[User.ID]
var goneWeight = 1f
def isOnline = offlineSince.isEmpty || botConnected
def setOnline(on: Boolean): Unit = {
isLongGone foreach { _ ?? notifyGone(color, false) }
offlineSince = if (on) None else offlineSince orElse nowMillis.some
bye = bye && !on
}
def setBye: Unit = {
bye = true
}
private def isHostingSimul: Fu[Boolean] = mightBeSimul ?? userId ?? { u =>
bus.ask[Set[User.ID]]('simulGetHosts)(GetHostIds).map(_ contains u)
}
private def timeoutMillis = {
if (bye) RoundSocket.ragequitTimeout.toMillis else RoundSocket.gameDisconnectTimeout(gameSpeed).toMillis
} * goneWeight atLeast 12000
def isLongGone: Fu[Boolean] = {
!botConnected && offlineSince.exists(_ < (nowMillis - timeoutMillis))
} ?? !isHostingSimul
def setBotConnected(v: Boolean) =
botConnected = v
def isBotConnected = botConnected
}
private val whitePlayer = new Player(White)
private val blackPlayer = new Player(Black)
def getGame: Fu[Option[Game]] = proxy.game
val process: Duct.ReceiveAsync = {
case p: HumanPlay =>
handleHumanPlay(p) { pov =>
if (pov.game.outoftime(withGrace = true)) finisher.outOfTime(pov.game)
else {
recordLag(pov)
player.human(p, this)(pov)
}
} >>- {
p.trace.finish()
lila.mon.round.move.full.count()
// socket stuff
case ByePlayer(playerId) => proxy playerPov playerId.value map {
_ foreach { pov =>
getPlayer(pov.color).setBye
}
}
case GetVersion(promise) => fuccess {
promise success version
}
case SetVersion(v) => fuccess {
version = v
}
case RoomCrowd(white, black) => fuccess {
whitePlayer setOnline white
blackPlayer setOnline black
}
case IsOnGame(color, promise) => fuccess {
promise success getPlayer(color).isOnline
}
case GetSocketStatus(promise) =>
whitePlayer.isLongGone zip blackPlayer.isLongGone map {
case (whiteIsGone, blackIsGone) => promise success SocketStatus(
version = version,
whiteOnGame = whitePlayer.isOnline,
whiteIsGone = whiteIsGone,
blackOnGame = blackPlayer.isOnline,
blackIsGone = blackIsGone
)
}
case p: BotPlay =>
handleBotPlay(p) { pov =>
if (pov.game.outoftime(withGrace = true)) finisher.outOfTime(pov.game)
else player.bot(p, this)(pov)
case HasUserId(userId, promise) => fuccess {
promise success {
(whitePlayer.userId.has(userId) && whitePlayer.isOnline) ||
(blackPlayer.userId.has(userId) && blackPlayer.isOnline)
}
}
case SetGameInfo(game, (whiteGoneWeight, blackGoneWeight)) => fuccess {
whitePlayer.userId = game.player(White).userId
blackPlayer.userId = game.player(Black).userId
mightBeSimul = game.isSimul
chatIds = chatIds update game
gameSpeed = game.speed.some
whitePlayer.goneWeight = whiteGoneWeight
blackPlayer.goneWeight = blackGoneWeight
buscriptions.chat
}
case lila.chat.actorApi.ChatLine(chatId, line) => fuccess {
publish(List(line match {
case l: lila.chat.UserLine => Event.UserMessage(l, chatId == chatIds.pub)
case l: lila.chat.PlayerLine => Event.PlayerMessage(l)
}))
}
case lila.chat.actorApi.OnTimeout(userId) => fuccess {
socketSend(RP.Out.tellRoom(roomId, makeMessage("chat_timeout", userId)))
}
case lila.chat.actorApi.OnReinstate(userId) => fuccess {
socketSend(RP.Out.tellRoom(roomId, makeMessage("chat_reinstate", userId)))
}
case Protocol.In.PlayerChatSay(_, Right(color), msg) => fuccess {
chatIds.priv.left.toOption foreach { messenger.owner(_, color, msg) }
}
case Protocol.In.PlayerChatSay(_, Left(userId), msg) => fuccess(chatIds.priv match {
case Left(chatId) => messenger.owner(chatId, userId, msg)
case Right(setup) => messenger.external(setup, userId, msg)
})
case Protocol.In.HoldAlert(fullId, ip, mean, sd) => handle(fullId.playerId) { pov =>
lila.game.GameRepo hasHoldAlert pov flatMap {
case true => funit
case false =>
lila.log("cheat").info(s"hold alert $ip https://lichess.org/${pov.gameId}/${pov.color.name}#${pov.game.turns} ${pov.player.userId | "anon"} mean: $mean SD: $sd")
lila.mon.cheat.holdAlert()
proxy.persist(_.setHoldAlert(pov, GamePlayer.HoldAlert(ply = pov.game.turns, mean = mean, sd = sd)).void)
} inject Nil
}
case Protocol.In.UserTv(_, userId) => fuccess {
buscriptions tv userId
}
case UserStartGame(userId, _) => fuccess {
socketSend(Protocol.Out.userTvNewGame(Game.Id(gameId), userId))
}
case a: lila.analyse.actorApi.AnalysisProgress => fuccess {
socketSend(RP.Out.tellRoom(roomId, makeMessage("analysisProgress", Json.obj(
"analysis" -> lila.analyse.JsonView.bothPlayers(a.game, a.analysis),
"tree" -> TreeBuilder(
id = a.analysis.id,
pgnMoves = a.game.pgnMoves,
variant = a.variant,
analysis = a.analysis.some,
initialFen = a.initialFen,
withFlags = JsonView.WithFlags(),
clocks = none
)
))))
}
// round stuff
case p: HumanPlay => handleHumanPlay(p) { pov =>
if (pov.game.outoftime(withGrace = true)) finisher.outOfTime(pov.game)
else {
recordLag(pov)
player.human(p, this)(pov)
}
} >>- {
p.trace.finish()
lila.mon.round.move.full.count()
}
case p: BotPlay => handleBotPlay(p) { pov =>
if (pov.game.outoftime(withGrace = true)) finisher.outOfTime(pov.game)
else player.bot(p, this)(pov)
}
case FishnetPlay(uci, ply) => handle { game =>
player.fishnet(game, ply, uci, this)
@ -75,7 +240,7 @@ private[round] final class RoundDuct(
case ResignForce(playerId) => handle(playerId) { pov =>
(pov.game.resignable && !pov.game.hasAi && pov.game.hasClock && !pov.isMyTurn && pov.forceResignable) ?? {
socketMap.ask[Boolean](pov.gameId)(IsGone(!pov.color, _)) flatMap {
getPlayer(!pov.color).isLongGone flatMap {
case true if !pov.game.variant.insufficientWinningMaterial(pov.game.board, pov.color) => finisher.rageQuit(pov.game, Some(pov.color))
case true => finisher.rageQuit(pov.game, None)
case _ => fuccess(List(Event.Reload))
@ -85,7 +250,7 @@ private[round] final class RoundDuct(
case DrawForce(playerId) => handle(playerId) { pov =>
(pov.game.drawable && !pov.game.hasAi && pov.game.hasClock) ?? {
socketMap.ask[Boolean](pov.gameId)(IsGone(!pov.color, _)) flatMap {
getPlayer(!pov.color).isLongGone flatMap {
case true => finisher.rageQuit(pov.game, None)
case _ => fuccess(List(Event.Reload))
}
@ -116,8 +281,8 @@ private[round] final class RoundDuct(
}
}
case DrawYes(playerRef) => handle(playerRef)(drawer.yes)
case DrawNo(playerRef) => handle(playerRef)(drawer.no)
case DrawYes(playerId) => handle(playerId)(drawer.yes)
case DrawNo(playerId) => handle(playerId)(drawer.no)
case DrawClaim(playerId) => handle(playerId)(drawer.claim)
case Cheat(color) => handle { game =>
(game.playable && !game.imported) ?? {
@ -134,27 +299,17 @@ private[round] final class RoundDuct(
}
}
case HoldAlert(playerId, mean, sd, ip) => handle(playerId) { pov =>
lila.game.GameRepo hasHoldAlert pov flatMap {
case true => funit
case false =>
lila.log("cheat").info(s"hold alert $ip https://lichess.org/${pov.gameId}/${pov.color.name}#${pov.game.turns} ${pov.player.userId | "anon"} mean: $mean SD: $sd")
lila.mon.cheat.holdAlert()
proxy.persist(_.setHoldAlert(pov, GamePlayer.HoldAlert(ply = pov.game.turns, mean = mean, sd = sd)).void)
} inject Nil
}
case RematchYes(playerId) => handle(PlayerId(playerId))(rematcher.yes)
case RematchNo(playerId) => handle(PlayerId(playerId))(rematcher.no)
case RematchYes(playerRef) => handle(PlayerId(playerRef))(rematcher.yes)
case RematchNo(playerRef) => handle(PlayerId(playerRef))(rematcher.no)
case TakebackYes(playerRef) => handle(playerRef) { pov =>
case TakebackYes(playerId) => handle(playerId) { pov =>
takebacker.yes(~takebackSituation)(pov) map {
case (events, situation) =>
takebackSituation = situation.some
events
}
}
case TakebackNo(playerRef) => handle(playerRef) { pov =>
case TakebackNo(playerId) => handle(playerId) { pov =>
takebacker.no(~takebackSituation)(pov) map {
case (events, situation) =>
takebackSituation = situation.some
@ -162,7 +317,7 @@ private[round] final class RoundDuct(
}
}
case Moretime(playerRef) => handle(playerRef) { pov =>
case Moretime(playerId) => handle(playerId) { pov =>
moretimer(pov) flatMap {
_ ?? { progress =>
proxy save progress inject progress.events
@ -206,9 +361,48 @@ private[round] final class RoundDuct(
player.requestFishnet(_, this)
}
}
case Tick => getGame map { g =>
if (g.exists(_.forceResignable)) Color.all.foreach { c =>
if (!getPlayer(c).isOnline) getPlayer(c).isLongGone foreach { _ ?? notifyGone(c, true) }
}
}
case Stop => fuccess {
if (buscriptions.started) {
buscriptions.unsubAll
socketSend(RP.Out.stop(roomId))
}
}
}
private[this] def recordLag(pov: Pov): Unit =
private object buscriptions {
private var classifiers = collection.mutable.Set.empty[Symbol]
private def sub(classifier: Symbol) =
if (!classifiers(classifier)) {
bus.subscribe(RoundDuct.this, classifier)
classifiers += classifier
}
def started = classifiers.nonEmpty
def unsubAll = {
bus.unsubscribe(RoundDuct.this, classifiers.toSeq)
classifiers.clear
}
def tv(userId: User.ID): Unit = sub(Symbol(s"userStartGame:$userId"))
def chat = chatIds.allIds foreach { chatId =>
sub(lila.chat.Chat classify chatId)
}
}
private def getPlayer(color: Color): Player = color.fold(whitePlayer, blackPlayer)
private def recordLag(pov: Pov): Unit =
if ((pov.game.playedTurns & 30) == 10) {
// Triggers every 32 moves starting on ply 10.
// i.e. 10, 11, 42, 43, 74, 75, ...
@ -219,52 +413,57 @@ private[round] final class RoundDuct(
} UserLagCache.put(user, lag)
}
private[this] def handle[A](op: Game => Fu[Events]): Funit =
private def notifyGone(color: Color, gone: Boolean): Unit = proxy pov color foreach {
_ foreach { notifyGone(_, gone) }
}
private def notifyGone(pov: Pov, gone: Boolean): Unit =
socketSend(Protocol.Out.gone(FullId(pov.fullId), gone))
private def handle[A](op: Game => Fu[Events]): Funit =
handleGame(proxy.game)(op)
private[this] def handle(playerId: PlayerId)(op: Pov => Fu[Events]): Funit =
private def handle(playerId: PlayerId)(op: Pov => Fu[Events]): Funit =
handlePov(proxy playerPov playerId.value)(op)
private[this] def handleHumanPlay(p: HumanPlay)(op: Pov => Fu[Events]): Funit =
private def handleHumanPlay(p: HumanPlay)(op: Pov => Fu[Events]): Funit =
handlePov {
p.trace.segment("fetch", "db") {
proxy playerPov p.playerId.value
}
}(op)
private[this] def handleBotPlay(p: BotPlay)(op: Pov => Fu[Events]): Funit =
private def handleBotPlay(p: BotPlay)(op: Pov => Fu[Events]): Funit =
handlePov(proxy playerPov p.playerId)(op)
private[this] def handle(color: Color)(op: Pov => Fu[Events]): Funit =
private def handle(color: Color)(op: Pov => Fu[Events]): Funit =
handlePov(proxy pov color)(op)
private[this] def handlePov(pov: Fu[Option[Pov]])(op: Pov => Fu[Events]): Funit =
private def handlePov(pov: Fu[Option[Pov]])(op: Pov => Fu[Events]): Funit =
pov flatten "pov not found" flatMap { p =>
(if (p.player.isAi) fufail(s"player $p can't play AI") else op(p)) map {
publish(p.game, _)
}
(if (p.player.isAi) fufail(s"player $p can't play AI") else op(p)) map publish
} recover errorHandler("handlePov")
private[this] def handleAi(game: Fu[Option[Game]])(op: Pov => Fu[Events]): Funit =
game.map(_.flatMap(_.aiPov)) flatten "pov not found" flatMap { pov =>
op(pov) map { publish(pov.game, _) }
} recover errorHandler("handleAi")
private def handleAi(game: Fu[Option[Game]])(op: Pov => Fu[Events]): Funit =
game.map(_.flatMap(_.aiPov)) flatten "pov not found" flatMap op map publish recover errorHandler("handleAi")
private[this] def handleGame(game: Fu[Option[Game]])(op: Game => Fu[Events]): Funit =
game flatten "game not found" flatMap { g =>
op(g) map { publish(g, _) }
} recover errorHandler("handleGame")
private def handleGame(game: Fu[Option[Game]])(op: Game => Fu[Events]): Funit =
game flatten "game not found" flatMap op map publish recover errorHandler("handleGame")
private[this] def publish[A](game: Game, events: Events): Unit =
private def publish[A](events: Events): Unit =
if (events.nonEmpty) {
socketMap.tell(gameId, EventList(events))
events map { e =>
version = version.inc
socketSend {
Protocol.Out.tellVersion(roomId, version, e)
}
}
if (events exists {
case e: Event.Move => e.threefold
case _ => false
}) this ! Threefold
}
private[this] def errorHandler(name: String): PartialFunction[Throwable, Unit] = {
private def errorHandler(name: String): PartialFunction[Throwable, Unit] = {
case e: ClientError =>
logger.info(s"Round client error $name: ${e.getMessage}")
lila.mon.round.error.client()
@ -273,21 +472,23 @@ private[round] final class RoundDuct(
lila.mon.round.error.fishnet()
case e: Exception => logger.warn(s"$name: ${e.getMessage}")
}
def roomId = RoomId(gameId)
}
object RoundDuct {
private[round] case class Dependencies(
messenger: Messenger,
takebacker: Takebacker,
moretimer: Moretimer,
finisher: Finisher,
rematcher: Rematcher,
player: Player,
drawer: Drawer,
forecastApi: ForecastApi,
socketMap: SocketMap
)
case class SetGameInfo(game: lila.game.Game, goneWeights: (Float, Float))
case object Tick
case object Stop
case class ChatIds(priv: Either[Chat.Id, Chat.Setup], pub: Chat.Id) {
def allIds = Seq(priv.fold(identity, _.id), pub)
def update(g: Game) = {
g.tournamentId.map(Chat.tournamentSetup) orElse
g.simulId.map(Chat.simulSetup)
}.fold(this)(setup => copy(priv = Right(setup)))
}
private[round] case class TakebackSituation(nbDeclined: Int, lastDeclined: Option[DateTime]) {
@ -302,4 +503,16 @@ object RoundDuct {
private[round] implicit val takebackSituationZero: Zero[TakebackSituation] =
Zero.instance(TakebackSituation(0, none))
private[round] case class Dependencies(
messenger: Messenger,
takebacker: Takebacker,
moretimer: Moretimer,
finisher: Finisher,
rematcher: Rematcher,
player: Player,
drawer: Drawer,
forecastApi: ForecastApi,
bus: lila.common.Bus
)
}

View File

@ -1,504 +0,0 @@
package lila.round
import play.api.libs.json._
import scala.concurrent.duration._
import actorApi._, round._
import chess.{ Color, White, Black, Speed }
import lila.chat.Chat
import lila.game.actorApi.UserStartGame
import lila.game.Game.{ PlayerId, FullId }
import lila.game.{ Game, Progress, Pov, Event, Source, Player => GamePlayer }
import lila.hub.actorApi.DeployPost
import lila.hub.actorApi.map._
import lila.hub.actorApi.round.TourStanding
import lila.hub.actorApi.round.{ FishnetPlay, FishnetStart, BotPlay, RematchYes, RematchNo, Abort, Resign, IsOnGame }
import lila.hub.actorApi.simul.GetHostIds
import lila.hub.actorApi.socket.HasUserId
import lila.hub.Duct
import lila.room.RoomSocket.{ Protocol => RP, _ }
import lila.socket.RemoteSocket.{ Protocol => P, _ }
import lila.socket.Socket.{ Sri, SocketVersion, GetVersion, makeMessage }
import lila.socket.UserLagCache
import lila.user.User
private[round] final class RoundRemoteDuct(
dependencies: RoundRemoteDuct.Dependencies,
gameId: Game.ID,
socketSend: String => Unit
)(implicit proxy: GameProxy) extends AnyRoundDuct {
import RoundRemoteSocket.Protocol
import RoundRemoteDuct._
import RoundDuct._
import dependencies._
private var takebackSituation: Option[TakebackSituation] = None
private var version = SocketVersion(0)
private var mightBeSimul = true // until proven false
private var gameSpeed: Option[Speed] = none
private var chatIds = ChatIds(
priv = Left(Chat.Id(gameId)), // until replaced with tourney/simul chat
pub = Chat.Id(s"$gameId/w")
)
private final class Player(color: Color) {
private var offlineSince: Option[Long] = nowMillis.some
// wether the player closed the window intentionally
private var bye: Boolean = false
// connected as a bot
private var botConnected: Boolean = false
var userId = none[User.ID]
var goneWeight = 1f
def isOnline = offlineSince.isEmpty || botConnected
def setOnline(on: Boolean): Unit = {
isLongGone foreach { _ ?? notifyGone(color, false) }
offlineSince = if (on) None else offlineSince orElse nowMillis.some
bye = bye && !on
}
def setBye: Unit = {
bye = true
}
private def isHostingSimul: Fu[Boolean] = mightBeSimul ?? userId ?? { u =>
bus.ask[Set[User.ID]]('simulGetHosts)(GetHostIds).map(_ contains u)
}
private def timeoutMillis = {
if (bye) RoundSocket.ragequitTimeout.toMillis else RoundSocket.gameDisconnectTimeout(gameSpeed).toMillis
} * goneWeight atLeast 12000
def isLongGone: Fu[Boolean] = {
!botConnected && offlineSince.exists(_ < (nowMillis - timeoutMillis))
} ?? !isHostingSimul
def setBotConnected(v: Boolean) =
botConnected = v
def isBotConnected = botConnected
}
private val whitePlayer = new Player(White)
private val blackPlayer = new Player(Black)
def getGame: Fu[Option[Game]] = proxy.game
val process: Duct.ReceiveAsync = {
// socket stuff
case ByePlayer(playerId) => proxy playerPov playerId.value map {
_ foreach { pov =>
getPlayer(pov.color).setBye
}
}
case GetVersion(promise) => fuccess {
promise success version
}
case SetVersion(v) => fuccess {
version = v
}
case RoomCrowd(white, black) => fuccess {
whitePlayer setOnline white
blackPlayer setOnline black
}
case IsOnGame(color, promise) => fuccess {
promise success getPlayer(color).isOnline
}
case GetSocketStatus(promise) =>
whitePlayer.isLongGone zip blackPlayer.isLongGone map {
case (whiteIsGone, blackIsGone) => promise success SocketStatus(
version = version,
whiteOnGame = whitePlayer.isOnline,
whiteIsGone = whiteIsGone,
blackOnGame = blackPlayer.isOnline,
blackIsGone = blackIsGone
)
}
case HasUserId(userId, promise) => fuccess {
promise success {
(whitePlayer.userId.has(userId) && whitePlayer.isOnline) ||
(blackPlayer.userId.has(userId) && blackPlayer.isOnline)
}
}
case SetGameInfo(game, (whiteGoneWeight, blackGoneWeight)) => fuccess {
whitePlayer.userId = game.player(White).userId
blackPlayer.userId = game.player(Black).userId
mightBeSimul = game.isSimul
chatIds = chatIds update game
gameSpeed = game.speed.some
whitePlayer.goneWeight = whiteGoneWeight
blackPlayer.goneWeight = blackGoneWeight
buscriptions.chat
}
case lila.chat.actorApi.ChatLine(chatId, line) => fuccess {
publish(List(line match {
case l: lila.chat.UserLine => Event.UserMessage(l, chatId == chatIds.pub)
case l: lila.chat.PlayerLine => Event.PlayerMessage(l)
}))
}
case lila.chat.actorApi.OnTimeout(userId) => fuccess {
socketSend(RP.Out.tellRoom(roomId, makeMessage("chat_timeout", userId)))
}
case lila.chat.actorApi.OnReinstate(userId) => fuccess {
socketSend(RP.Out.tellRoom(roomId, makeMessage("chat_reinstate", userId)))
}
case Protocol.In.PlayerChatSay(_, Right(color), msg) => fuccess {
chatIds.priv.left.toOption foreach { messenger.owner(_, color, msg) }
}
case Protocol.In.PlayerChatSay(_, Left(userId), msg) => fuccess(chatIds.priv match {
case Left(chatId) => messenger.owner(chatId, userId, msg)
case Right(setup) => messenger.external(setup, userId, msg)
})
case Protocol.In.HoldAlert(fullId, ip, mean, sd) => handle(fullId.playerId) { pov =>
lila.game.GameRepo hasHoldAlert pov flatMap {
case true => funit
case false =>
lila.log("cheat").info(s"hold alert $ip https://lichess.org/${pov.gameId}/${pov.color.name}#${pov.game.turns} ${pov.player.userId | "anon"} mean: $mean SD: $sd")
lila.mon.cheat.holdAlert()
proxy.persist(_.setHoldAlert(pov, GamePlayer.HoldAlert(ply = pov.game.turns, mean = mean, sd = sd)).void)
} inject Nil
}
case Protocol.In.UserTv(_, userId) => fuccess {
buscriptions tv userId
}
case UserStartGame(userId, _) => fuccess {
socketSend(Protocol.Out.userTvNewGame(Game.Id(gameId), userId))
}
case a: lila.analyse.actorApi.AnalysisProgress => fuccess {
socketSend(RP.Out.tellRoom(roomId, makeMessage("analysisProgress", Json.obj(
"analysis" -> lila.analyse.JsonView.bothPlayers(a.game, a.analysis),
"tree" -> TreeBuilder(
id = a.analysis.id,
pgnMoves = a.game.pgnMoves,
variant = a.variant,
analysis = a.analysis.some,
initialFen = a.initialFen,
withFlags = JsonView.WithFlags(),
clocks = none
)
))))
}
// round stuff
case p: HumanPlay => handleHumanPlay(p) { pov =>
if (pov.game.outoftime(withGrace = true)) finisher.outOfTime(pov.game)
else {
recordLag(pov)
player.human(p, this)(pov)
}
} >>- {
p.trace.finish()
lila.mon.round.move.full.count()
}
case p: BotPlay => handleBotPlay(p) { pov =>
if (pov.game.outoftime(withGrace = true)) finisher.outOfTime(pov.game)
else player.bot(p, this)(pov)
}
case FishnetPlay(uci, ply) => handle { game =>
player.fishnet(game, ply, uci, this)
} >>- lila.mon.round.move.full.count()
case Abort(playerId) => handle(PlayerId(playerId)) { pov =>
pov.game.abortable ?? finisher.abort(pov)
}
case Resign(playerId) => handle(PlayerId(playerId)) { pov =>
pov.game.resignable ?? finisher.other(pov.game, _.Resign, Some(!pov.color))
}
case ResignAi => handleAi(proxy.game) { pov =>
pov.game.resignable ?? finisher.other(pov.game, _.Resign, Some(!pov.color))
}
case GoBerserk(color) => handle(color) { pov =>
pov.game.goBerserk(color) ?? { progress =>
proxy.save(progress) >> proxy.persist(_ goBerserk pov) inject progress.events
}
}
case ResignForce(playerId) => handle(playerId) { pov =>
(pov.game.resignable && !pov.game.hasAi && pov.game.hasClock && !pov.isMyTurn && pov.forceResignable) ?? {
getPlayer(!pov.color).isLongGone flatMap {
case true if !pov.game.variant.insufficientWinningMaterial(pov.game.board, pov.color) => finisher.rageQuit(pov.game, Some(pov.color))
case true => finisher.rageQuit(pov.game, None)
case _ => fuccess(List(Event.Reload))
}
}
}
case DrawForce(playerId) => handle(playerId) { pov =>
(pov.game.drawable && !pov.game.hasAi && pov.game.hasClock) ?? {
getPlayer(!pov.color).isLongGone flatMap {
case true => finisher.rageQuit(pov.game, None)
case _ => fuccess(List(Event.Reload))
}
}
}
// checks if any player can safely (grace) be flagged
case QuietFlag => handle { game =>
game.outoftime(withGrace = true) ?? finisher.outOfTime(game)
}
// flags a specific player, possibly without grace if self
case ClientFlag(color, from) => handle { game =>
(game.turnColor == color) ?? {
val toSelf = from has PlayerId(game.player(color).id)
game.outoftime(withGrace = !toSelf) ?? finisher.outOfTime(game)
}
}
// exceptionally we don't block nor publish events
// if the game is abandoned, then nobody is around to see it
case Abandon => fuccess {
proxy withGame { game =>
game.abandoned ?? {
if (game.abortable) finisher.other(game, _.Aborted, None)
else finisher.other(game, _.Resign, Some(!game.player.color))
}
}
}
case DrawYes(playerId) => handle(playerId)(drawer.yes)
case DrawNo(playerId) => handle(playerId)(drawer.no)
case DrawClaim(playerId) => handle(playerId)(drawer.claim)
case Cheat(color) => handle { game =>
(game.playable && !game.imported) ?? {
finisher.other(game, _.Cheat, Some(!color))
}
}
case TooManyPlies => handle(drawer force _)
case Threefold => proxy withGame { game =>
drawer autoThreefold game map {
_ foreach { pov =>
this ! DrawClaim(PlayerId(pov.player.id))
}
}
}
case RematchYes(playerId) => handle(PlayerId(playerId))(rematcher.yes)
case RematchNo(playerId) => handle(PlayerId(playerId))(rematcher.no)
case TakebackYes(playerId) => handle(playerId) { pov =>
takebacker.yes(~takebackSituation)(pov) map {
case (events, situation) =>
takebackSituation = situation.some
events
}
}
case TakebackNo(playerId) => handle(playerId) { pov =>
takebacker.no(~takebackSituation)(pov) map {
case (events, situation) =>
takebackSituation = situation.some
events
}
}
case Moretime(playerId) => handle(playerId) { pov =>
moretimer(pov) flatMap {
_ ?? { progress =>
proxy save progress inject progress.events
}
}
}
case ForecastPlay(lastMove) => handle { game =>
forecastApi.nextMove(game, lastMove) map { mOpt =>
mOpt foreach { move =>
this ! HumanPlay(PlayerId(game.player.id), move, false)
}
Nil
}
}
case DeployPost => handle { game =>
game.playable ?? {
val freeTime = 20.seconds
messenger.system(game, (_.untranslated("Lichess has been updated! Sorry for the inconvenience.")))
val progress = moretimer.give(game, Color.all, freeTime)
proxy save progress inject progress.events
}
}
case AbortForMaintenance => handle { game =>
messenger.system(game, (_.untranslated("Game aborted for server maintenance. Sorry for the inconvenience!")))
game.playable ?? finisher.other(game, _.Aborted, None)
}
case AbortForce => handle { game =>
game.playable ?? finisher.other(game, _.Aborted, None)
}
case NoStart => handle { game =>
game.timeBeforeExpiration.exists(_.centis == 0) ?? finisher.noStart(game)
}
case FishnetStart => proxy.game map {
_.filter(_.playableByAi) foreach {
player.requestFishnet(_, this)
}
}
case Tick => getGame map { g =>
if (g.exists(_.forceResignable)) Color.all.foreach { c =>
if (!getPlayer(c).isOnline) getPlayer(c).isLongGone foreach { _ ?? notifyGone(c, true) }
}
}
case Stop => fuccess {
if (buscriptions.started) {
buscriptions.unsubAll
socketSend(RP.Out.stop(roomId))
}
}
}
private object buscriptions {
private var classifiers = collection.mutable.Set.empty[Symbol]
private def sub(classifier: Symbol) =
if (!classifiers(classifier)) {
bus.subscribe(RoundRemoteDuct.this, classifier)
classifiers += classifier
}
def started = classifiers.nonEmpty
def unsubAll = {
bus.unsubscribe(RoundRemoteDuct.this, classifiers.toSeq)
classifiers.clear
}
def tv(userId: User.ID): Unit = sub(Symbol(s"userStartGame:$userId"))
def chat = chatIds.allIds foreach { chatId =>
sub(lila.chat.Chat classify chatId)
}
}
private def getPlayer(color: Color): Player = color.fold(whitePlayer, blackPlayer)
private def recordLag(pov: Pov): Unit =
if ((pov.game.playedTurns & 30) == 10) {
// Triggers every 32 moves starting on ply 10.
// i.e. 10, 11, 42, 43, 74, 75, ...
for {
user <- pov.player.userId
clock <- pov.game.clock
lag <- clock.lag(pov.color).lagMean
} UserLagCache.put(user, lag)
}
private def notifyGone(color: Color, gone: Boolean): Unit = proxy pov color foreach {
_ foreach { notifyGone(_, gone) }
}
private def notifyGone(pov: Pov, gone: Boolean): Unit =
socketSend(Protocol.Out.gone(FullId(pov.fullId), gone))
private def handle[A](op: Game => Fu[Events]): Funit =
handleGame(proxy.game)(op)
private def handle(playerId: PlayerId)(op: Pov => Fu[Events]): Funit =
handlePov(proxy playerPov playerId.value)(op)
private def handleHumanPlay(p: HumanPlay)(op: Pov => Fu[Events]): Funit =
handlePov {
p.trace.segment("fetch", "db") {
proxy playerPov p.playerId.value
}
}(op)
private def handleBotPlay(p: BotPlay)(op: Pov => Fu[Events]): Funit =
handlePov(proxy playerPov p.playerId)(op)
private def handle(color: Color)(op: Pov => Fu[Events]): Funit =
handlePov(proxy pov color)(op)
private def handlePov(pov: Fu[Option[Pov]])(op: Pov => Fu[Events]): Funit =
pov flatten "pov not found" flatMap { p =>
(if (p.player.isAi) fufail(s"player $p can't play AI") else op(p)) map publish
} recover errorHandler("handlePov")
private def handleAi(game: Fu[Option[Game]])(op: Pov => Fu[Events]): Funit =
game.map(_.flatMap(_.aiPov)) flatten "pov not found" flatMap op map publish recover errorHandler("handleAi")
private def handleGame(game: Fu[Option[Game]])(op: Game => Fu[Events]): Funit =
game flatten "game not found" flatMap op map publish recover errorHandler("handleGame")
private def publish[A](events: Events): Unit =
if (events.nonEmpty) {
events map { e =>
version = version.inc
socketSend {
Protocol.Out.tellVersion(roomId, version, e)
}
}
if (events exists {
case e: Event.Move => e.threefold
case _ => false
}) this ! Threefold
}
private def errorHandler(name: String): PartialFunction[Throwable, Unit] = {
case e: ClientError =>
logger.info(s"Round client error $name: ${e.getMessage}")
lila.mon.round.error.client()
case e: FishnetError =>
logger.info(s"Round fishnet error $name: ${e.getMessage}")
lila.mon.round.error.fishnet()
case e: Exception => logger.warn(s"$name: ${e.getMessage}")
}
def roomId = RoomId(gameId)
}
object RoundRemoteDuct {
case class SetGameInfo(game: lila.game.Game, goneWeights: (Float, Float))
case object Tick
case object Stop
case class ChatIds(priv: Either[Chat.Id, Chat.Setup], pub: Chat.Id) {
def allIds = Seq(priv.fold(identity, _.id), pub)
def update(g: Game) = {
g.tournamentId.map(Chat.tournamentSetup) orElse
g.simulId.map(Chat.simulSetup)
}.fold(this)(setup => copy(priv = Right(setup)))
}
private[round] case class Dependencies(
messenger: Messenger,
takebacker: Takebacker,
moretimer: Moretimer,
finisher: Finisher,
rematcher: Rematcher,
player: Player,
drawer: Drawer,
forecastApi: ForecastApi,
bus: lila.common.Bus
)
}

View File

@ -1,292 +0,0 @@
package lila.round
import akka.actor.{ ActorSystem, ActorSelection, Scheduler, Cancellable }
import play.api.libs.json._
import scala.concurrent.duration._
import scala.concurrent.Promise
import actorApi._
import actorApi.round._
import chess.format.Uci
import chess.{ Color, White, Black, Speed, Centis, MoveMetrics }
import lila.chat.Chat
import lila.common.IpAddress
import lila.game.Game.{ PlayerId, FullId }
import lila.game.{ Game, Event }
import lila.hub.actorApi.map.{ Tell, TellIfExists, Exists }
import lila.hub.actorApi.round.{ Berserk, RematchYes, RematchNo, Abort, Resign, TourStanding }
import lila.hub.actorApi.socket.remote.TellSriIn
import lila.hub.actorApi.tv.TvSelect
import lila.hub.actorApi.DeployPost
import lila.hub.DuctConcMap
import lila.room.RoomSocket.{ Protocol => RP, _ }
import lila.socket.RemoteSocket.{ Protocol => P, _ }
import lila.socket.Socket.{ Sri, SocketVersion, GetVersion, makeMessage }
import lila.user.User
final class RoundRemoteSocket(
remoteSocketApi: lila.socket.RemoteSocket,
roundDependencies: RoundRemoteDuct.Dependencies,
deployPersistence: DeployPersistence,
scheduleExpiration: Game => Unit,
tournamentActor: ActorSelection,
selfReport: SelfReport,
messenger: Messenger,
goneWeightsFor: Game => Fu[(Float, Float)],
useRemoteSocket: Game.ID => Boolean,
system: ActorSystem
) {
import RoundRemoteSocket._
def getGame(gameId: Game.ID): Fu[Option[Game]] = rounds.getOrMake(gameId).getGame addEffect { g =>
if (!g.isDefined) finishRound(Game.Id(gameId))
}
def gameIfPresent(gameId: Game.ID): Fu[Option[Game]] = rounds.getIfPresent(gameId).??(_.getGame)
def updateIfPresent(game: Game): Fu[Game] =
rounds.getIfPresent(game.id).fold(fuccess(game))(_.getGame.map(_ | game))
val rounds = new DuctConcMap[RoundRemoteDuct](
mkDuct = id => {
val duct = new RoundRemoteDuct(
dependencies = roundDependencies,
gameId = id,
socketSend = send
)(new GameProxy(id, deployPersistence.isEnabled, system.scheduler))
terminationDelay schedule Game.Id(id)
duct.getGame foreach {
_ foreach { game =>
scheduleExpiration(game)
goneWeightsFor(game) map { RoundRemoteDuct.SetGameInfo(game, _) } foreach duct.!
}
}
duct
},
initialCapacity = 32768
)
def tellRound(gameId: Game.Id, msg: Any): Unit = rounds.tell(gameId.value, msg)
private lazy val roundHandler: Handler = {
case Protocol.In.PlayerDo(id, tpe, o) => tpe match {
case "moretime" => tellRound(id.gameId, Moretime(id.playerId))
case "rematch-yes" => tellRound(id.gameId, RematchYes(id.playerId.value))
case "rematch-no" => tellRound(id.gameId, RematchNo(id.playerId.value))
case "takeback-yes" => tellRound(id.gameId, TakebackYes(id.playerId))
case "takeback-no" => tellRound(id.gameId, TakebackNo(id.playerId))
case "draw-yes" => tellRound(id.gameId, DrawYes(id.playerId))
case "draw-no" => tellRound(id.gameId, DrawNo(id.playerId))
case "draw-claim" => tellRound(id.gameId, DrawClaim(id.playerId))
case "resign" => tellRound(id.gameId, Resign(id.playerId.value))
case "resign-force" => tellRound(id.gameId, ResignForce(id.playerId))
case "draw-force" => tellRound(id.gameId, DrawForce(id.playerId))
case "abort" => tellRound(id.gameId, Abort(id.playerId.value))
case "outoftime" => tellRound(id.gameId, QuietFlag) // mobile app BC
case t => logger.warn(s"Unhandled round socket message: $t")
}
case Protocol.In.Flag(gameId, color, fromPlayerId) => tellRound(gameId, ClientFlag(color, fromPlayerId))
case c: Protocol.In.PlayerChatSay => tellRound(c.gameId, c)
case Protocol.In.WatcherChatSay(gameId, userId, msg) => messenger.watcher(Chat.Id(gameId.value), userId, msg)
case RP.In.ChatTimeout(roomId, modId, suspect, reason) =>
messenger.timeout(Chat.Id(s"$roomId/w"), modId, suspect, reason)
case Protocol.In.PlayerMove(fullId, uci, blur, lag) =>
// TODO remove promise, resync from remote round duct
val promise = Promise[Unit]
promise.future onFailure { case _: Exception => send(Protocol.Out.resyncPlayer(fullId)) }
tellRound(fullId.gameId, HumanPlay(fullId.playerId, uci, blur, lag, promise.some))
case Protocol.In.Berserk(gameId, userId) => tournamentActor ! Berserk(gameId.value, userId)
case Protocol.In.PlayerOnlines(onlines) => onlines foreach {
case (gameId, Some(on)) =>
tellRound(gameId, on)
terminationDelay cancel gameId
case (gameId, _) =>
if (rounds exists gameId.value) terminationDelay schedule gameId
}
case Protocol.In.Bye(fullId) => tellRound(fullId.gameId, ByePlayer(fullId.playerId))
case RP.In.TellRoomSri(gameId, P.In.TellSri(sri, user, tpe, o)) => tpe match {
case t => logger.warn(s"Unhandled round socket message: $t")
}
case hold: Protocol.In.HoldAlert => tellRound(hold.fullId.gameId, hold)
case Protocol.In.SelfReport(fullId, ip, userId, name) => selfReport(userId, ip, fullId, name)
case userTv: Protocol.In.UserTv => tellRound(userTv.gameId, userTv)
case P.In.TellSri(sri, userId, tpe, msg) => // eval cache
bus.publish(TellSriIn(sri.value, userId, msg), Symbol(s"remoteSocketIn:$tpe"))
case RP.In.SetVersions(versions) => versions foreach {
case (roomId, version) => rounds.tell(roomId, SetVersion(version))
}
case P.In.WsBoot =>
logger.warn("Remote socket boot")
// schedule termination for all game ducts
// until players actually reconnect
rounds foreachKey { id => terminationDelay schedule Game.Id(id) }
rounds.tellAll(DeployPost)
}
private def finishRound(gameId: Game.Id): Unit =
rounds.terminate(gameId.value, _ ! RoundRemoteDuct.Stop)
private lazy val send: String => Unit = remoteSocketApi.makeSender("r-out").apply _
private val bus = system.lilaBus
remoteSocketApi.subscribe("r-in", Protocol.In.reader)(
roundHandler orElse remoteSocketApi.baseHandler
) >>- send(P.Out.boot)
bus.subscribeFun('tvSelect, 'roundSocket, 'tourStanding) {
case TvSelect(gameId, speed, json) => send(Protocol.Out.tvSelect(gameId, speed, json))
case Tell(gameId, BotConnected(color, v)) if useRemoteSocket(gameId) => send(Protocol.Out.botConnected(gameId, color, v))
case Tell(gameId, msg) if useRemoteSocket(gameId) => rounds.tell(gameId, msg)
case TellIfExists(gameId, msg) if useRemoteSocket(gameId) => rounds.tellIfPresent(gameId, msg)
case Exists(gameId, promise) if useRemoteSocket(gameId) => promise success rounds.exists(gameId)
case TourStanding(tourId, json) => send(Protocol.Out.tourStanding(tourId, json))
}
system.scheduler.schedule(30 seconds, 5 seconds) {
rounds.tellAll(RoundRemoteDuct.Tick)
}
private val terminationDelay = new TerminationDelay(system.scheduler, 1 minute, finishRound)
}
object RoundRemoteSocket {
object Protocol {
object In {
case class PlayerOnlines(onlines: Iterable[(Game.Id, Option[RoomCrowd])]) extends P.In
case class PlayerDo(fullId: FullId, tpe: String, msg: JsObject) extends P.In
case class PlayerMove(fullId: FullId, uci: Uci, blur: Boolean, lag: MoveMetrics) extends P.In
case class PlayerChatSay(gameId: Game.Id, userIdOrColor: Either[User.ID, Color], msg: String) extends P.In
case class WatcherChatSay(gameId: Game.Id, userId: User.ID, msg: String) extends P.In
case class Bye(fullId: FullId) extends P.In
case class HoldAlert(fullId: FullId, ip: IpAddress, mean: Int, sd: Int) extends P.In
case class Flag(gameId: Game.Id, color: Color, fromPlayerId: Option[PlayerId]) extends P.In
case class Berserk(gameId: Game.Id, userId: User.ID) extends P.In
case class SelfReport(fullId: FullId, ip: IpAddress, userId: Option[User.ID], name: String) extends P.In
case class UserTv(gameId: Game.Id, userId: User.ID) extends P.In
val reader: P.In.Reader = raw => raw.path match {
case "r/ons" => PlayerOnlines {
P.In.commas(raw.args) map {
_ splitAt Game.gameIdSize match {
case (gameId, cs) => (
Game.Id(gameId),
if (cs.isEmpty) None else Some(RoomCrowd(cs(0) == '+', cs(1) == '+'))
)
}
}
}.some
case "r/do" => raw.get(2) {
case Array(fullId, payload) => for {
obj <- Json.parse(payload).asOpt[JsObject]
tpe <- obj str "t"
} yield PlayerDo(FullId(fullId), tpe, obj)
}
case "r/move" => raw.get(5) {
case Array(fullId, uciS, blurS, lagS, mtS) => Uci(uciS) map { uci =>
PlayerMove(FullId(fullId), uci, P.In.boolean(blurS), MoveMetrics(centis(lagS), centis(mtS)))
}
}
case "chat/say" => raw.get(3) {
case Array(roomId, author, msg) =>
PlayerChatSay(Game.Id(roomId), readColor(author).toRight(author), msg).some
}
case "chat/say/w" => raw.get(3) {
case Array(roomId, userId, msg) => WatcherChatSay(Game.Id(roomId), userId, msg).some
}
case "r/berserk" => raw.get(2) {
case Array(gameId, userId) => Berserk(Game.Id(gameId), userId).some
}
case "r/bye" => Bye(Game.FullId(raw.args)).some
case "r/hold" => raw.get(4) {
case Array(fullId, ip, meanS, sdS) => for {
mean <- parseIntOption(meanS)
sd <- parseIntOption(sdS)
} yield HoldAlert(FullId(fullId), IpAddress(ip), mean, sd)
}
case "r/report" => raw.get(4) {
case Array(fullId, ip, user, name) => SelfReport(FullId(fullId), IpAddress(ip), P.In.optional(user), name).some
}
case "r/flag" => raw.get(3) {
case Array(gameId, color, playerId) => readColor(color) map {
Flag(Game.Id(gameId), _, P.In.optional(playerId) map PlayerId.apply)
}
}
case "r/tv/user" => raw.get(2) {
case Array(gameId, userId) => UserTv(Game.Id(gameId), userId).some
}
case _ => RP.In.reader(raw)
}
private def centis(s: String): Option[Centis] =
if (s == "-") none
else parseIntOption(s) map Centis.apply
private def readColor(s: String) =
if (s == "w") Some(White)
else if (s == "b") Some(Black)
else None
}
object Out {
def resyncPlayer(fullId: FullId) = s"r/resync/player $fullId"
def gone(fullId: FullId, gone: Boolean) = s"r/gone $fullId ${P.Out.boolean(gone)}"
def tellVersion(roomId: RoomId, version: SocketVersion, e: Event) = {
val flags = new StringBuilder(2)
if (e.watcher) flags += 's'
else if (e.owner) flags += 'p'
else e.only.map(_.fold('w', 'b')).orElse {
e.moveBy.map(_.fold('W', 'B'))
} foreach flags.+=
if (e.troll) flags += 't'
if (flags.isEmpty) flags += '-'
s"r/ver $roomId $version $flags ${e.typ} ${e.data}"
}
def userTvNewGame(gameId: Game.Id, userId: User.ID) =
s"r/tv/user $gameId $userId"
def tvSelect(gameId: Game.ID, speed: chess.Speed, data: JsObject) =
s"tv/select $gameId ${speed.id} ${Json stringify data}"
def botConnected(gameId: Game.ID, color: Color, v: Boolean) =
s"r/bot/online $gameId ${P.Out.color(color)} ${P.Out.boolean(v)}"
def tourStanding(tourId: String, data: JsValue) =
s"r/tour/standing $tourId ${Json stringify data}"
}
}
private final class TerminationDelay(
scheduler: Scheduler,
duration: FiniteDuration,
terminate: Game.Id => Unit
) {
import java.util.concurrent.ConcurrentHashMap
import java.util.function.BiFunction
private[this] val terminations = new ConcurrentHashMap[String, Cancellable](32768)
def schedule(gameId: Game.Id): Unit = terminations.compute(
gameId.value,
new BiFunction[String, Cancellable, Cancellable] {
def apply(id: String, canc: Cancellable) = {
Option(canc).foreach(_.cancel)
scheduler.scheduleOnce(duration) {
terminations.remove(id)
terminate(Game.Id(id))
}
}
}
)
def cancel(gameId: Game.Id): Unit =
Option(terminations remove gameId.value).foreach(_.cancel)
}
}

View File

@ -1,330 +1,153 @@
package lila.round
import scala.concurrent.duration._
import akka.actor._
import akka.pattern.{ ask, pipe }
import chess.{ Color, White, Black, Speed }
import play.api.libs.iteratee._
import akka.actor.{ ActorSystem, ActorSelection, Scheduler, Cancellable }
import play.api.libs.json._
import scala.concurrent.duration._
import scala.concurrent.Promise
import actorApi._
import actorApi.round._
import chess.format.Uci
import chess.{ Color, White, Black, Speed, Centis, MoveMetrics }
import lila.chat.Chat
import lila.common.LightUser
import lila.game.actorApi.{ StartGame, UserStartGame }
import lila.common.IpAddress
import lila.game.Game.{ PlayerId, FullId }
import lila.game.{ Game, Event }
import lila.hub.actorApi.Deploy
import lila.hub.actorApi.round.{ IsOnGame, TourStandingOld }
import lila.hub.actorApi.simul.GetHostIds
import lila.hub.Trouper
import lila.socket._
import lila.socket.actorApi.{ Connected => _, _ }
import lila.socket.Socket
import lila.hub.actorApi.map.{ Tell, TellIfExists, Exists }
import lila.hub.actorApi.round.{ Berserk, RematchYes, RematchNo, Abort, Resign, TourStanding }
import lila.hub.actorApi.socket.remote.TellSriIn
import lila.hub.actorApi.tv.TvSelect
import lila.hub.actorApi.DeployPost
import lila.hub.DuctConcMap
import lila.room.RoomSocket.{ Protocol => RP, _ }
import lila.socket.RemoteSocket.{ Protocol => P, _ }
import lila.socket.Socket.{ Sri, SocketVersion, GetVersion, makeMessage }
import lila.user.User
import makeTimeout.short
private[round] final class RoundSocket(
dependencies: RoundSocket.Dependencies,
gameId: Game.ID,
history: History,
keepMeAlive: () => Unit,
getGoneWeights: Game => Fu[(Float, Float)]
) extends SocketTrouper[Member](dependencies.system, dependencies.sriTtl) {
final class RoundSocket(
remoteSocketApi: lila.socket.RemoteSocket,
roundDependencies: RoundDuct.Dependencies,
deployPersistence: DeployPersistence,
scheduleExpiration: Game => Unit,
tournamentActor: ActorSelection,
selfReport: SelfReport,
messenger: Messenger,
goneWeightsFor: Game => Fu[(Float, Float)],
system: ActorSystem
) {
import RoundSocket._
import dependencies._
private var hasAi = false
private var mightBeSimul = true // until proven false
private var gameSpeed: Option[Speed] = none
private var chatIds = RoundSocket.ChatIds(
priv = Chat.Id(gameId), // until replaced with tourney/simul chat
pub = Chat.Id(s"$gameId/w")
)
private var tournamentId = none[String] // until set, to listen to standings
private var delayedCrowdNotification = false
private final class Player(color: Color) {
// when the player has been seen online for the last time
private var time: Long = nowMillis
// wether the player closed the window intentionally
private var bye: Int = 0
// connected as a bot
private var botConnected: Boolean = false
var userId = none[User.ID]
var goneWeight = 1f
def ping: Unit = {
isGone foreach { _ ?? notifyGone(color, false) }
if (bye > 0) bye = bye - 1
time = nowMillis
}
def setBye: Unit = {
bye = 3
}
private def isBye = bye > 0
private def isHostingSimul: Fu[Boolean] = mightBeSimul ?? userId ?? { u =>
lilaBus.ask[Set[User.ID]]('simulGetHosts)(GetHostIds).map(_ contains u)
}
private def timeoutMillis = {
if (isBye) ragequitTimeout.toMillis else gameDisconnectTimeout(gameSpeed).toMillis
} * goneWeight atLeast 12000
def isGone: Fu[Boolean] = {
time < (nowMillis - timeoutMillis) && !botConnected
} ?? !isHostingSimul
def setBotConnected(v: Boolean) =
botConnected = v
def isBotConnected = botConnected
def getGame(gameId: Game.ID): Fu[Option[Game]] = rounds.getOrMake(gameId).getGame addEffect { g =>
if (!g.isDefined) finishRound(Game.Id(gameId))
}
private val whitePlayer = new Player(White)
private val blackPlayer = new Player(Black)
def gameIfPresent(gameId: Game.ID): Fu[Option[Game]] = rounds.getIfPresent(gameId).??(_.getGame)
buscriptions.subAll
getGame(gameId) map SetGame.apply foreach this.!
def updateIfPresent(game: Game): Fu[Game] =
rounds.getIfPresent(game.id).fold(fuccess(game))(_.getGame.map(_ | game))
override def stop(): Unit = {
buscriptions.unsubAll
super.stop()
}
private object buscriptions {
private var classifiers = collection.mutable.Set.empty[Symbol]
private def sub(classifier: Symbol) = {
lilaBus.subscribe(RoundSocket.this, classifier)
classifiers += classifier
}
def unsubAll = {
lilaBus.unsubscribe(RoundSocket.this, classifiers.toSeq)
classifiers.clear
}
def subAll = {
tv
chat
tournament
}
def tv = members.flatMap { case (_, m) => m.userTv }.toSet foreach { (userId: User.ID) =>
sub(Symbol(s"userStartGame:$userId"))
}
def chat = chatIds.all foreach { chatId =>
sub(lila.chat.Chat classify chatId)
}
def tournament = tournamentId foreach { id =>
sub(Symbol(s"tour-standing-$id"))
}
}
def receiveSpecific: Trouper.Receive = ({
case SetGame(Some(game)) =>
hasAi = game.hasAi
whitePlayer.userId = game.player(White).userId
blackPlayer.userId = game.player(Black).userId
mightBeSimul = game.isSimul
game.tournamentId orElse game.simulId map Chat.Id.apply foreach { chatId =>
chatIds = chatIds.copy(priv = chatId)
buscriptions.chat
}
game.tournamentId foreach { tourId =>
tournamentId = tourId.some
buscriptions.tournament
}
gameSpeed = game.speed.some
getGoneWeights(game) foreach {
case (w, b) => {
whitePlayer.goneWeight = w
blackPlayer.goneWeight = b
val rounds = new DuctConcMap[RoundDuct](
mkDuct = id => {
val duct = new RoundDuct(
dependencies = roundDependencies,
gameId = id,
socketSend = send
)(new GameProxy(id, deployPersistence.isEnabled, system.scheduler))
terminationDelay schedule Game.Id(id)
duct.getGame foreach {
_ foreach { game =>
scheduleExpiration(game)
goneWeightsFor(game) map { RoundDuct.SetGameInfo(game, _) } foreach duct.!
}
}
// from lilaBus 'startGame
// sets definitive user ids
// in case one joined after the socket creation
case StartGame(game) => this ! SetGame(game.some)
case d: Deploy =>
onDeploy(d)
history.persistNow()
case BotConnected(color, v) =>
playerDo(color, _ setBotConnected v)
notifyCrowd
case Bye(color) => playerDo(color, _.setBye)
case IsGone(color, promise) => promise completeWith playerGet(color, _.isGone)
case IsOnGame(color, promise) => promise success ownerIsHere(color)
case GetSocketStatus(promise) =>
playerGet(White, _.isGone) zip playerGet(Black, _.isGone) foreach {
case (whiteIsGone, blackIsGone) => promise success SocketStatus(
version = history.getVersion,
whiteOnGame = ownerIsHere(White),
whiteIsGone = whiteIsGone,
blackOnGame = ownerIsHere(Black),
blackIsGone = blackIsGone
)
}
case Join(sri, user, color, playerId, onTv, version, mobile, promise) => {
val (enumerator, channel) = Concurrent.broadcast[JsValue]
val member = Member(channel, user, color, playerId, onTv.map(_.userId))
addMember(sri, member)
notifyCrowd
if (playerId.isDefined) playerDo(color, _.ping)
val reloadTvEvent = onTv ?? {
case UserTv(_, reload) => reload map {
case true => SocketTrouper.resyncMessage.some
case false =>
buscriptions.tv // reload buscriptions
none
}
}
val events = version.fold(history.getRecentEvents(5).some) { v =>
history.getEventsSince(v, lila.mon.round.history(mobile).some) match {
case History.Types.UpToDate => Nil.some
case History.Types.Events(e) => e.some
case _ => None
}
}
val initialMsgs = events.fold(
SocketTrouper.resyncMessage.some
) { batchMsgs(member, _) } map { m => Enumerator(m: JsValue) }
val fullEnumerator = lila.common.Iteratee.prependFu(
reloadTvEvent.map(_.toList),
initialMsgs.fold(enumerator) { _ >>> enumerator }
)
promise success Connected(fullEnumerator, member)
}
case EventList(events) => notify(events)
case lila.chat.actorApi.ChatLine(chatId, line) => notify(List(line match {
case l: lila.chat.UserLine => Event.UserMessage(l, chatId == chatIds.pub)
case l: lila.chat.PlayerLine => Event.PlayerMessage(l)
}))
case a: lila.analyse.actorApi.AnalysisProgress =>
notifyAll("analysisProgress", Json.obj(
"analysis" -> lila.analyse.JsonView.bothPlayers(a.game, a.analysis),
"tree" -> TreeBuilder(
id = a.analysis.id,
pgnMoves = a.game.pgnMoves,
variant = a.variant,
analysis = a.analysis.some,
initialFen = a.initialFen,
withFlags = JsonView.WithFlags(),
clocks = none
)
))
case UserStartGame(userId, game) => foreachWatcher { m =>
if (m.onUserTv(userId) && !m.userId.exists(game.userIds.contains))
m push makeMessage("resync")
}
case NotifyCrowd =>
delayedCrowdNotification = false
showSpectators(lightUser)(members.values.filter(_.watcher)) foreach { spectators =>
val event = Event.Crowd(
white = ownerIsHere(White),
black = ownerIsHere(Black),
watchers = spectators
)
notifyAll(event.typ, event.data)
}
case TourStandingOld(json) => notifyOwners("tourStanding", json)
}: Trouper.Receive) orElse lila.chat.Socket.out(
send = (t, d, _) => notifyAll(t, d)
duct
},
initialCapacity = 32768
)
override def broom = {
super.broom
if (members.nonEmpty) keepMeAlive()
if (!hasAi) Color.all foreach { c =>
playerGet(c, _.isGone) foreach { _ ?? notifyGone(c, true) }
def tellRound(gameId: Game.Id, msg: Any): Unit = rounds.tell(gameId.value, msg)
private lazy val roundHandler: Handler = {
case Protocol.In.PlayerDo(id, tpe, o) => tpe match {
case "moretime" => tellRound(id.gameId, Moretime(id.playerId))
case "rematch-yes" => tellRound(id.gameId, RematchYes(id.playerId.value))
case "rematch-no" => tellRound(id.gameId, RematchNo(id.playerId.value))
case "takeback-yes" => tellRound(id.gameId, TakebackYes(id.playerId))
case "takeback-no" => tellRound(id.gameId, TakebackNo(id.playerId))
case "draw-yes" => tellRound(id.gameId, DrawYes(id.playerId))
case "draw-no" => tellRound(id.gameId, DrawNo(id.playerId))
case "draw-claim" => tellRound(id.gameId, DrawClaim(id.playerId))
case "resign" => tellRound(id.gameId, Resign(id.playerId.value))
case "resign-force" => tellRound(id.gameId, ResignForce(id.playerId))
case "draw-force" => tellRound(id.gameId, DrawForce(id.playerId))
case "abort" => tellRound(id.gameId, Abort(id.playerId.value))
case "outoftime" => tellRound(id.gameId, QuietFlag) // mobile app BC
case t => logger.warn(s"Unhandled round socket message: $t")
}
case Protocol.In.Flag(gameId, color, fromPlayerId) => tellRound(gameId, ClientFlag(color, fromPlayerId))
case c: Protocol.In.PlayerChatSay => tellRound(c.gameId, c)
case Protocol.In.WatcherChatSay(gameId, userId, msg) => messenger.watcher(Chat.Id(gameId.value), userId, msg)
case RP.In.ChatTimeout(roomId, modId, suspect, reason) =>
messenger.timeout(Chat.Id(s"$roomId/w"), modId, suspect, reason)
case Protocol.In.PlayerMove(fullId, uci, blur, lag) =>
// TODO remove promise, resync from remote round duct
val promise = Promise[Unit]
promise.future onFailure { case _: Exception => send(Protocol.Out.resyncPlayer(fullId)) }
tellRound(fullId.gameId, HumanPlay(fullId.playerId, uci, blur, lag, promise.some))
case Protocol.In.Berserk(gameId, userId) => tournamentActor ! Berserk(gameId.value, userId)
case Protocol.In.PlayerOnlines(onlines) => onlines foreach {
case (gameId, Some(on)) =>
tellRound(gameId, on)
terminationDelay cancel gameId
case (gameId, _) =>
if (rounds exists gameId.value) terminationDelay schedule gameId
}
case Protocol.In.Bye(fullId) => tellRound(fullId.gameId, ByePlayer(fullId.playerId))
case RP.In.TellRoomSri(gameId, P.In.TellSri(sri, user, tpe, o)) => tpe match {
case t => logger.warn(s"Unhandled round socket message: $t")
}
case hold: Protocol.In.HoldAlert => tellRound(hold.fullId.gameId, hold)
case Protocol.In.SelfReport(fullId, ip, userId, name) => selfReport(userId, ip, fullId, name)
case userTv: Protocol.In.UserTv => tellRound(userTv.gameId, userTv)
case P.In.TellSri(sri, userId, tpe, msg) => // eval cache
bus.publish(TellSriIn(sri.value, userId, msg), Symbol(s"remoteSocketIn:$tpe"))
case RP.In.SetVersions(versions) => versions foreach {
case (roomId, version) => rounds.tell(roomId, SetVersion(version))
}
case P.In.WsBoot =>
logger.warn("Remote socket boot")
// schedule termination for all game ducts
// until players actually reconnect
rounds foreachKey { id => terminationDelay schedule Game.Id(id) }
rounds.tellAll(DeployPost)
}
override protected def afterQuit(sri: Socket.Sri, member: Member) = notifyCrowd
private def finishRound(gameId: Game.Id): Unit =
rounds.terminate(gameId.value, _ ! RoundDuct.Stop)
def notifyCrowd: Unit = if (isAlive) {
if (!delayedCrowdNotification) {
delayedCrowdNotification = true
system.scheduler.scheduleOnce(1 second)(this ! NotifyCrowd)
}
private lazy val send: String => Unit = remoteSocketApi.makeSender("r-out").apply _
private val bus = system.lilaBus
remoteSocketApi.subscribe("r-in", Protocol.In.reader)(
roundHandler orElse remoteSocketApi.baseHandler
) >>- send(P.Out.boot)
bus.subscribeFun('tvSelect, 'roundSocket, 'tourStanding) {
case TvSelect(gameId, speed, json) => send(Protocol.Out.tvSelect(gameId, speed, json))
case Tell(gameId, BotConnected(color, v)) => send(Protocol.Out.botConnected(gameId, color, v))
case Tell(gameId, msg) => rounds.tell(gameId, msg)
case TellIfExists(gameId, msg) => rounds.tellIfPresent(gameId, msg)
case Exists(gameId, promise) => promise success rounds.exists(gameId)
case TourStanding(tourId, json) => send(Protocol.Out.tourStanding(tourId, json))
}
def notify(events: Events): Unit = {
val vevents = history addEvents events
members.foreachValue { m =>
batchMsgs(m, vevents) foreach m.push
}
system.scheduler.schedule(30 seconds, 5 seconds) {
rounds.tellAll(RoundDuct.Tick)
}
def batchMsgs(member: Member, vevents: List[VersionedEvent]) = vevents match {
case Nil => None
case List(one) => one.jsFor(member).some
case many => makeMessage("b", many map (_ jsFor member)).some
}
def notifyOwner[A: Writes](color: Color, t: String, data: A) =
withOwnerOf(color) {
_ push makeMessage(t, data)
}
def notifyGone(color: Color, gone: Boolean): Unit = {
notifyOwner(!color, "gone", gone)
}
def withOwnerOf(color: Color)(f: Member => Unit) =
members.foreachValue { m =>
if (m.owner && m.color == color) f(m)
}
def notifyOwners[A: Writes](t: String, data: A) =
members.foreachValue { m =>
if (m.owner) m push makeMessage(t, data)
}
def ownerIsHere(color: Color) = playerGet(color, _.isBotConnected) ||
members.values.exists { m =>
m.owner && m.color == color
}
def ownerOf(sri: Socket.Sri): Option[Member] =
members get sri.value filter (_.owner)
def foreachWatcher(f: Member => Unit): Unit = members.foreachValue { m =>
if (m.watcher) f(m)
}
private def playerGet[A](color: Color, getter: Player => A): A =
getter(color.fold(whitePlayer, blackPlayer))
def playerDo(color: Color, effect: Player => Unit): Unit =
effect(color.fold(whitePlayer, blackPlayer))
private val terminationDelay = new TerminationDelay(system.scheduler, 1 minute, finishRound)
}
object RoundSocket {
@ -339,14 +162,140 @@ object RoundSocket {
case _ => 1
}
case class ChatIds(priv: Chat.Id, pub: Chat.Id) {
def all = Seq(priv, pub)
object Protocol {
object In {
case class PlayerOnlines(onlines: Iterable[(Game.Id, Option[RoomCrowd])]) extends P.In
case class PlayerDo(fullId: FullId, tpe: String, msg: JsObject) extends P.In
case class PlayerMove(fullId: FullId, uci: Uci, blur: Boolean, lag: MoveMetrics) extends P.In
case class PlayerChatSay(gameId: Game.Id, userIdOrColor: Either[User.ID, Color], msg: String) extends P.In
case class WatcherChatSay(gameId: Game.Id, userId: User.ID, msg: String) extends P.In
case class Bye(fullId: FullId) extends P.In
case class HoldAlert(fullId: FullId, ip: IpAddress, mean: Int, sd: Int) extends P.In
case class Flag(gameId: Game.Id, color: Color, fromPlayerId: Option[PlayerId]) extends P.In
case class Berserk(gameId: Game.Id, userId: User.ID) extends P.In
case class SelfReport(fullId: FullId, ip: IpAddress, userId: Option[User.ID], name: String) extends P.In
case class UserTv(gameId: Game.Id, userId: User.ID) extends P.In
val reader: P.In.Reader = raw => raw.path match {
case "r/ons" => PlayerOnlines {
P.In.commas(raw.args) map {
_ splitAt Game.gameIdSize match {
case (gameId, cs) => (
Game.Id(gameId),
if (cs.isEmpty) None else Some(RoomCrowd(cs(0) == '+', cs(1) == '+'))
)
}
}
}.some
case "r/do" => raw.get(2) {
case Array(fullId, payload) => for {
obj <- Json.parse(payload).asOpt[JsObject]
tpe <- obj str "t"
} yield PlayerDo(FullId(fullId), tpe, obj)
}
case "r/move" => raw.get(5) {
case Array(fullId, uciS, blurS, lagS, mtS) => Uci(uciS) map { uci =>
PlayerMove(FullId(fullId), uci, P.In.boolean(blurS), MoveMetrics(centis(lagS), centis(mtS)))
}
}
case "chat/say" => raw.get(3) {
case Array(roomId, author, msg) =>
PlayerChatSay(Game.Id(roomId), readColor(author).toRight(author), msg).some
}
case "chat/say/w" => raw.get(3) {
case Array(roomId, userId, msg) => WatcherChatSay(Game.Id(roomId), userId, msg).some
}
case "r/berserk" => raw.get(2) {
case Array(gameId, userId) => Berserk(Game.Id(gameId), userId).some
}
case "r/bye" => Bye(Game.FullId(raw.args)).some
case "r/hold" => raw.get(4) {
case Array(fullId, ip, meanS, sdS) => for {
mean <- parseIntOption(meanS)
sd <- parseIntOption(sdS)
} yield HoldAlert(FullId(fullId), IpAddress(ip), mean, sd)
}
case "r/report" => raw.get(4) {
case Array(fullId, ip, user, name) => SelfReport(FullId(fullId), IpAddress(ip), P.In.optional(user), name).some
}
case "r/flag" => raw.get(3) {
case Array(gameId, color, playerId) => readColor(color) map {
Flag(Game.Id(gameId), _, P.In.optional(playerId) map PlayerId.apply)
}
}
case "r/tv/user" => raw.get(2) {
case Array(gameId, userId) => UserTv(Game.Id(gameId), userId).some
}
case _ => RP.In.reader(raw)
}
private def centis(s: String): Option[Centis] =
if (s == "-") none
else parseIntOption(s) map Centis.apply
private def readColor(s: String) =
if (s == "w") Some(White)
else if (s == "b") Some(Black)
else None
}
object Out {
def resyncPlayer(fullId: FullId) = s"r/resync/player $fullId"
def gone(fullId: FullId, gone: Boolean) = s"r/gone $fullId ${P.Out.boolean(gone)}"
def tellVersion(roomId: RoomId, version: SocketVersion, e: Event) = {
val flags = new StringBuilder(2)
if (e.watcher) flags += 's'
else if (e.owner) flags += 'p'
else e.only.map(_.fold('w', 'b')).orElse {
e.moveBy.map(_.fold('W', 'B'))
} foreach flags.+=
if (e.troll) flags += 't'
if (flags.isEmpty) flags += '-'
s"r/ver $roomId $version $flags ${e.typ} ${e.data}"
}
def userTvNewGame(gameId: Game.Id, userId: User.ID) =
s"r/tv/user $gameId $userId"
def tvSelect(gameId: Game.ID, speed: chess.Speed, data: JsObject) =
s"tv/select $gameId ${speed.id} ${Json stringify data}"
def botConnected(gameId: Game.ID, color: Color, v: Boolean) =
s"r/bot/online $gameId ${P.Out.color(color)} ${P.Out.boolean(v)}"
def tourStanding(tourId: String, data: JsValue) =
s"r/tour/standing $tourId ${Json stringify data}"
}
}
private[round] case class Dependencies(
system: ActorSystem,
lightUser: LightUser.Getter,
sriTtl: FiniteDuration,
getGame: Game.ID => Fu[Option[Game]]
)
private final class TerminationDelay(
scheduler: Scheduler,
duration: FiniteDuration,
terminate: Game.Id => Unit
) {
import java.util.concurrent.ConcurrentHashMap
import java.util.function.BiFunction
private[this] val terminations = new ConcurrentHashMap[String, Cancellable](32768)
def schedule(gameId: Game.Id): Unit = terminations.compute(
gameId.value,
new BiFunction[String, Cancellable, Cancellable] {
def apply(id: String, canc: Cancellable) = {
Option(canc).foreach(_.cancel)
scheduler.scheduleOnce(duration) {
terminations.remove(id)
terminate(Game.Id(id))
}
}
}
)
def cancel(gameId: Game.Id): Unit =
Option(terminations remove gameId.value).foreach(_.cancel)
}
}

View File

@ -1,250 +0,0 @@
package lila.round
import scala.concurrent.duration._
import scala.concurrent.Promise
import scala.util.Try
import chess.format.Uci
import chess.{ Centis, MoveMetrics, Color }
import play.api.libs.json.{ JsObject, JsNumber, Json, Reads }
import actorApi._, round._
import lila.chat.Chat
import lila.common.{ IpAddress, ApiVersion, IsMobile }
import lila.game.Game.{ PlayerId, FullId }
import lila.game.{ Pov, PovRef, Game }
import lila.hub.actorApi.map._
import lila.hub.actorApi.round.{ Berserk, RematchYes, RematchNo, Abort, Resign }
import lila.hub.actorApi.shutup.PublicSource
import lila.hub.DuctMap
import lila.socket.actorApi.{ Connected => _, _ }
import lila.socket.Handler
import lila.socket.Socket
import lila.user.User
import makeTimeout.short
private[round] final class SocketHandler(
roundMap: DuctMap[RoundDuct],
socketMap: SocketMap,
hub: lila.hub.Env,
messenger: Messenger,
evalCacheHandler: lila.evalCache.EvalCacheSocketHandler,
selfReport: SelfReport,
bus: lila.common.Bus,
isRecentTv: Game.ID => Boolean
) {
import SocketHandler._
private def controller(
gameId: Game.ID,
chat: Option[Chat.Setup], // if using a non-game chat (tournament, simul, ...)
socket: RoundSocket,
sri: Socket.Sri,
ref: PovRef,
member: Member,
ip: IpAddress,
me: Option[User],
mobile: IsMobile,
onPing: () => Unit
): Handler.Controller = {
def send(msg: Any): Unit = roundMap.tell(gameId, msg)
def handlePing(o: JsObject) = {
onPing()
Handler.recordUserLagFromPing(member, o)
}
member.playerIdOption.map(PlayerId.apply).fold[Handler.Controller](({
case ("p", o) => handlePing(o)
case ("talk", o) => for {
line <- o str "d"
u <- member.userId
} messenger.watcher(Chat.Id(gameId), u, line)
case ("outoftime", _) => send(QuietFlag) // mobile app BC (dropped in lila-ws)
case ("flag", o) => clientFlag(o, none) foreach send
}: Handler.Controller) orElse evalCacheHandler(sri, member, me) orElse lila.chat.Socket.in(
chatId = Chat.Id(s"$gameId/w"),
member = member,
chat = messenger.chat,
publicSource = PublicSource.Watcher(gameId).some
)) { playerId =>
({
case ("p", o) => handlePing(o)
case ("move", o) => parseMove(o) foreach {
case (move, blur, lag, ackId) =>
val promise = Promise[Unit]
promise.future onFailure {
case _: Exception => socket ! Resync(sri)
}
send(HumanPlay(playerId, move, blur, lag, promise.some))
member.push(ackMessage(ackId))
}
case ("drop", o) => parseDrop(o) foreach {
case (drop, blur, lag, ackId) =>
val promise = Promise[Unit]
promise.future onFailure {
case _: Exception => socket ! Resync(sri)
}
send(HumanPlay(playerId, drop, blur, lag, promise.some))
member.push(ackMessage(ackId))
}
case ("rematch-yes", _) => send(RematchYes(playerId.value))
case ("rematch-no", _) => send(RematchNo(playerId.value))
case ("takeback-yes", _) => send(TakebackYes(playerId))
case ("takeback-no", _) => send(TakebackNo(playerId))
case ("draw-yes", _) => send(DrawYes(playerId))
case ("draw-no", _) => send(DrawNo(playerId))
case ("draw-claim", _) => send(DrawClaim(playerId))
case ("resign", _) => send(Resign(playerId.value))
case ("resign-force", _) => send(ResignForce(playerId))
case ("draw-force", _) => send(DrawForce(playerId))
case ("abort", _) => send(Abort(playerId.value))
case ("moretime", _) => send(Moretime(playerId))
case ("outoftime", _) => send(QuietFlag) // mobile app BC
case ("flag", o) => clientFlag(o, playerId.some) foreach send
case ("bye2", _) => socket ! Bye(ref.color)
case ("talk", o) if chat.isEmpty => o str "d" foreach { msg =>
member.userId match {
case Some(u) => messenger.owner(Chat.Id(gameId), u, msg)
case None => messenger.owner(Chat.Id(gameId), member.color, msg)
}
}
case ("hold", o) => for {
d o obj "d"
mean d int "mean"
sd d int "sd"
} send(HoldAlert(playerId, mean, sd, ip))
case ("berserk", o) => member.userId foreach { userId =>
hub.tournamentApi ! Berserk(gameId, userId)
member.push(ackMessage((o \ "d" \ "a").asOpt[AckId]))
}
case ("rep", o) => for {
d o obj "d"
name d str "n"
} selfReport(member.userId, ip, FullId(s"$gameId$playerId"), name)
}: Handler.Controller) orElse lila.chat.Socket.in(
chatId = chat.fold(Chat.Id(gameId))(_.id),
publicSource = chat.map(_.publicSource),
member = member,
chat = messenger.chat
)
}
}
def watcher(
pov: Pov,
sri: Socket.Sri,
user: Option[User],
ip: IpAddress,
userTv: Option[UserTv],
version: Option[Socket.SocketVersion],
apiVersion: ApiVersion,
mobile: IsMobile
): Fu[JsSocketHandler] = join(pov, none, sri, user, ip, userTv, version, apiVersion, mobile)
def player(
pov: Pov,
sri: Socket.Sri,
user: Option[User],
ip: IpAddress,
version: Option[Socket.SocketVersion],
apiVersion: ApiVersion,
mobile: IsMobile
): Fu[JsSocketHandler] =
join(pov, Some(pov.playerId), sri, user, ip, none, version, apiVersion, mobile)
private def join(
pov: Pov,
playerId: Option[String],
sri: Socket.Sri,
user: Option[User],
ip: IpAddress,
userTv: Option[UserTv],
version: Option[Socket.SocketVersion],
apiVersion: ApiVersion,
mobile: IsMobile
): Fu[JsSocketHandler] = {
val socket = socketMap getOrMake pov.gameId
socket.ask[Connected](promise => Join(
sri = sri,
user = user,
color = pov.color,
playerId = playerId,
userTv = userTv,
version = version,
mobile = mobile,
promise = promise
)) map {
case Connected(enum, member) =>
// register to the TV channel when watching TV
if (playerId.isEmpty && isRecentTv(pov.gameId)) bus.publish(
lila.socket.Channel.Sub(member),
'tvSelectChannel
)
// non-game chat, for tournament or simul games; only for players
val chatSetup = playerId.isDefined ?? {
pov.game.tournamentId.map(Chat.tournamentSetup) orElse pov.game.simulId.map(Chat.simulSetup)
}
val onPing: Handler.OnPing =
if (member.owner) (_, _, _, _) => {
Handler.defaultOnPing(socket, member, sri, apiVersion)
if (member.owner) socket.playerDo(member.color, _.ping)
}
else Handler.defaultOnPing
Handler.iteratee(
hub,
controller(pov.gameId, chatSetup, socket, sri, pov.ref, member, ip, user, mobile,
() => onPing(socket, member, sri, apiVersion)),
member,
socket,
sri,
apiVersion,
onPing = onPing
) -> enum
}
}
private def parseMove(o: JsObject) = for {
d o obj "d"
move <- d str "u" flatMap Uci.Move.apply orElse parseOldMove(d)
blur = d int "b" contains 1
ackId = d.get[AckId]("a")
} yield (move, blur, parseLag(d), ackId)
private def parseOldMove(d: JsObject) = for {
orig d str "from"
dest d str "to"
prom = d str "promotion"
move <- Uci.Move.fromStrings(orig, dest, prom)
} yield move
private def parseDrop(o: JsObject) = for {
d o obj "d"
role d str "role"
pos d str "pos"
drop <- Uci.Drop.fromStrings(role, pos)
blur = d int "b" contains 1
ackId = d.get[AckId]("a")
} yield (drop, blur, parseLag(d), ackId)
private def parseLag(d: JsObject) = MoveMetrics(
d.int("l") orElse d.int("lag") map Centis.ofMillis,
d.str("s") flatMap { v => Try(Centis(Integer.parseInt(v, 36))).toOption }
)
private def clientFlag(o: JsObject, playerId: Option[PlayerId]) =
o str "d" flatMap Color.apply map { ClientFlag(_, playerId) }
private val ackEmpty = Json.obj("t" -> "ack")
private def ackMessage(id: Option[AckId]) = id.fold(ackEmpty) { ackId =>
ackEmpty + ("d" -> JsNumber(ackId.value))
}
}
private object SocketHandler {
case class AckId(value: Int)
implicit val ackIdReads: Reads[AckId] = Reads.of[Int] map AckId.apply
}

View File

@ -1,56 +0,0 @@
package lila.round
import scala.concurrent.duration._
import lila.game.Game
import lila.hub.actorApi.Deploy
import lila.hub.actorApi.map.{ Tell, TellIfExists, Exists }
import lila.user.User
private object SocketMap {
def make(
makeHistory: Game.ID => History,
dependencies: RoundSocket.Dependencies,
socketTimeout: FiniteDuration,
playban: lila.playban.PlaybanApi,
useRemoteSocket: Game.ID => Boolean
): SocketMap = {
import dependencies._
val defaultGoneWeight = fuccess(1f)
def goneWeight(userId: User.ID): Fu[Float] = playban.getRageSit(userId).dmap(_.goneWeight)
def goneWeights(game: Game): Fu[(Float, Float)] =
game.whitePlayer.userId.fold(defaultGoneWeight)(goneWeight) zip
game.blackPlayer.userId.fold(defaultGoneWeight)(goneWeight)
lazy val socketMap: SocketMap = lila.socket.SocketMap[RoundSocket](
system = system,
mkTrouper = (id: Game.ID) => new RoundSocket(
dependencies = dependencies,
gameId = id,
history = makeHistory(id),
keepMeAlive = () => socketMap touch id,
getGoneWeights = goneWeights
),
accessTimeout = socketTimeout,
monitoringName = "round.socketMap",
broomFrequency = 4001 millis
)
system.lilaBus.subscribeFuns(
'startGame -> {
case msg: lila.game.actorApi.StartGame => socketMap.tellIfPresent(msg.game.id, msg)
},
'roundSocket -> {
case TellIfExists(id, msg) if !useRemoteSocket(id) => socketMap.tellIfPresent(id, msg)
case Tell(id, msg) if !useRemoteSocket(id) => socketMap.tell(id, msg)
case Exists(id, promise) if !useRemoteSocket(id) => promise success socketMap.exists(id)
},
'deploy -> {
case m: Deploy => socketMap tellAll m
}
)
socketMap
}
}

View File

@ -5,8 +5,6 @@ import lila.socket.WithSocket
package object round extends PackageObject with WithSocket {
private[round] type SocketMap = lila.hub.TrouperMap[RoundSocket]
private[round] type Events = List[Event]
private[round] def logger = lila.log("round")

View File

@ -1,12 +1,12 @@
.is2d .pawn.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MzAwOS0zIiB4MT0iNDE4MS42IiB4Mj0iNDE4MS42IiB5MT0iLTI2MTguNiIgeTI9Ii0yNDk2LjIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjI3Njc3IDAgMCAuMjc1NTUgLTExMzIuMyA3MzEuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlNmU2ZTYiIG9mZnNldD0iMSIvPg0KICA8L2xpbmVhckdyYWRpZW50Pg0KICA8ZmlsdGVyIGlkPSJmaWx0ZXI4MzQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQogICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0icmdiKDAsMCwwKSIgZmxvb2Qtb3BhY2l0eT0iLjQ5ODA0IiByZXN1bHQ9ImZsb29kIi8+DQogICA8ZmVDb21wb3NpdGUgaW49ImZsb29kIiBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIgcmVzdWx0PSJjb21wb3NpdGUxIi8+DQogICA8ZmVHYXVzc2lhbkJsdXIgaW49ImNvbXBvc2l0ZTEiIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjYiLz4NCiAgIDxmZU9mZnNldCBkeD0iMS42IiBkeT0iMS40IiByZXN1bHQ9Im9mZnNldCIvPg0KICAgPGZlQ29tcG9zaXRlIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9Im9mZnNldCIgcmVzdWx0PSJjb21wb3NpdGUyIi8+DQogIDwvZmlsdGVyPg0KIDwvZGVmcz4NCiA8bWV0YWRhdGE+DQogIDxyZGY6UkRGPg0KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPg0KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4NCiAgICA8ZGM6dGl0bGUvPg0KICAgPC9jYzpXb3JrPg0KICA8L3JkZjpSREY+DQogPC9tZXRhZGF0YT4NCiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTY2NTggMCAwIC45NzI0NSAuODMzNDIgMS4yNDMxKSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgc3Ryb2tlLXdpZHRoPSIxLjAzMTQiPg0KICA8cGF0aCBjbGFzcz0ic3QzMSIgZD0ibTI1LjAyNCA0My40MDFoLTEzLjkwNWMtMi41NTE0LTUuODg1MyA0LjIxMzQtMTEuMzQxIDguOTY4My0xMy4xOTQtNS42ODI3LTMuMTYwNi0yLjYwMjEtMTEuMjE5IDIuMjY4OC0xMS44NzMtMS4xNTk4LTAuNzYyOS0xLjczOTYtMi4zOTI5LTEuNzM5Ni0zLjcwMDggMC0xLjA4OTkgMC40NjM5Mi0yLjA3MDggMS4yNzU3LTIuODMzNyAwLjgxMTg1LTAuNzYyOSAxLjg1NTYtMS4xOTg4IDMuMTMxMy0xLjE5ODggMS4xNTk3IDAgMi4yMDM1IDAuNDM1OTMgMy4xMzEzIDEuMTk4OCAwLjgxMTgyIDAuNzYyOSAxLjI3NTcgMS43NDM4IDEuMjc1NyAyLjgzMzcgMCAxLjMwNzgtMC41Nzk4OSAyLjkzNzktMS43Mzk3IDMuNzAwOCA1LjMzNDggMi4wNzA3IDcuMjU1OCA5LjY5MzEgMi4yNjg5IDExLjg3MyA2LjQ5NDUgMi4yODg3IDExLjA1NiA4LjA3MTYgOC45NjgzIDEzLjE5NHoiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQzMDA5LTMpIiBmaWx0ZXI9InVybCgjZmlsdGVyODM0KSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuMTM0NiIvPg0KIDwvZz4NCjwvc3ZnPg0K')}
.is2d .knight.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjA4MS05IiB4MT0iMTA3MjAiIHgyPSIxMDcyMiIgeTE9Ii04MTYzLjYiIHkyPSItODAyNS4zIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4yNjY3MSAwIDAgLjI2NTE1IC0yODM1LjIgMjE3MS4zKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGZpbHRlciBpZD0iZmlsdGVyODQ3IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPg0KICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9InJnYigwLDAsMCkiIGZsb29kLW9wYWNpdHk9Ii40OTgwNCIgcmVzdWx0PSJmbG9vZCIvPg0KICAgPGZlQ29tcG9zaXRlIGluPSJmbG9vZCIgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iIHJlc3VsdD0iY29tcG9zaXRlMSIvPg0KICAgPGZlR2F1c3NpYW5CbHVyIGluPSJjb21wb3NpdGUxIiByZXN1bHQ9ImJsdXIiIHN0ZERldmlhdGlvbj0iMC42Ii8+DQogICA8ZmVPZmZzZXQgZHg9IjEuNiIgZHk9IjEuNCIgcmVzdWx0PSJvZmZzZXQiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJvZmZzZXQiIHJlc3VsdD0iY29tcG9zaXRlMiIvPg0KICA8L2ZpbHRlcj4NCiA8L2RlZnM+DQogPG1ldGFkYXRhPg0KICA8cmRmOlJERj4NCiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4NCiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+DQogICAgPGRjOnRpdGxlLz4NCiAgIDwvY2M6V29yaz4NCiAgPC9yZGY6UkRGPg0KIDwvbWV0YWRhdGE+DQogPHBhdGggZD0ibTIxLjY1IDEwLjI0Ni0yLjk5OTUtMC4wMzE2cy0wLjkzNDU3LTIuODYwNS0zLjI0NDgtMi42Nzg4Yy0wLjc4OTIxIDEuMjI4OSAwLjYwNjIzIDQuODQ4OCAwLjYwNjIzIDQuODQ4OGwtMS4zODI2IDEuNDgxNXMtOC4wNzM3IDEyLjM5NC04LjA3MzcgMTQuNjg2Yy0wLjEyNDI0IDIuODE4OCAxLjg5MTcgNC4yMDk2IDMuODc3MSA1LjA0OCAwLjY1NzIxIDAuMjc3NTIgMS4zMTExIDAuNDk0NSAxLjg4MjggMC42ODI3MSAyLjUxMTEgMC4zODk2NiA0LjA5MTktMy40Nzg0IDcuNTQ3NS01Ljc3MDUgMy40NDczLTEuODgzIDQuMTM1NC0xLjkzIDYuMjEzNi0zLjU1NC0yLjM2MDQgMTIuMDExLTkuNzM0NSA4LjUzNDctOS4xNTM2IDE4LjQ5M2gyNi40OTRjMC41NzA3Ny0yMy44NDctNi4yMTMxLTMxLjkzOC0xOC4xMDQtMzMuMTk5LTAuMDUxNy0xLjUzMiAwLjI0Mjk3LTQuMTc5NS0xLjMyOC0zLjY0NTEtMS41NzA5IDAuNTM0NDUtMi4zMzUxIDMuNjM5NC0yLjMzNTEgMy42Mzk0eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDIwODEtOSkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjg0NykiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuMSIvPg0KIDxwYXRoIGQ9Im0xNS43NjEgMTkuMTM0czAuNDU3MzYtMi4zNjc4IDMuMTA2OS0yLjc3NiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS13aWR0aD0iMS40Ii8+DQogPGVsbGlwc2UgY3g9IjE3Ljc5OSIgY3k9IjE4LjM1OCIgcng9IjEuMTUwNiIgcnk9IjEuMDY1MSIgc3R5bGU9InBhaW50LW9yZGVyOm1hcmtlcnMgZmlsbCBzdHJva2UiLz4NCiA8cGF0aCBkPSJtMTEuMTYzIDMzLjEzNXMxLjYxNTQtMC45MzQxNSAyLjEzNzMtMi4yNjE2IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4NCiA8cGF0aCBkPSJtMjUuNTY1IDEzLjAzNWMyLjM1NSAwLjE1MDEzIDE1LjI1MSAwLjkxODA2IDE0LjY5MSAyNy44NTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4NCiA8cGF0aCBkPSJtOS4xMjQgMjguODhzLTVlLTMgLTAuNzU3ODUgMS4wNTUyLTEuMTc5MyIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS13aWR0aD0iMS40Ii8+DQo8L3N2Zz4NCg==')}
.is2d .bishop.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjcyMCIgeDE9IjEzMjY5IiB4Mj0iMTMyNjkiIHkxPSItOTY2Mi43IiB5Mj0iLTk1MTkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjI2NDU4IDAgMCAuMjY0NTggLTM0ODUuNyAyNTYyLjYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlNmU2ZTYiIG9mZnNldD0iMSIvPg0KICA8L2xpbmVhckdyYWRpZW50Pg0KICA8ZmlsdGVyIGlkPSJmaWx0ZXIyODA5LTUtOC01LTEtNC03LTQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQogICA8ZmVHYXVzc2lhbkJsdXIgcmVzdWx0PSJibHVyIiBzdGREZXZpYXRpb249IjAuMDEgMC4wMSIvPg0KICA8L2ZpbHRlcj4NCiAgPGZpbHRlciBpZD0iZmlsdGVyODQ1IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPg0KICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9InJnYigwLDAsMCkiIGZsb29kLW9wYWNpdHk9Ii40OTgwNCIgcmVzdWx0PSJmbG9vZCIvPg0KICAgPGZlQ29tcG9zaXRlIGluPSJmbG9vZCIgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iIHJlc3VsdD0iY29tcG9zaXRlMSIvPg0KICAgPGZlR2F1c3NpYW5CbHVyIGluPSJjb21wb3NpdGUxIiByZXN1bHQ9ImJsdXIiIHN0ZERldmlhdGlvbj0iMC42Ii8+DQogICA8ZmVPZmZzZXQgZHg9IjEuNiIgZHk9IjEuNCIgcmVzdWx0PSJvZmZzZXQiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJvZmZzZXQiIHJlc3VsdD0iY29tcG9zaXRlMiIvPg0KICA8L2ZpbHRlcj4NCiA8L2RlZnM+DQogPG1ldGFkYXRhPg0KICA8cmRmOlJERj4NCiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4NCiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+DQogICAgPGRjOnRpdGxlLz4NCiAgIDwvY2M6V29yaz4NCiAgPC9yZGY6UkRGPg0KIDwvbWV0YWRhdGE+DQogPGcgY2xpcC1ydWxlPSJldmVub2RkIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+DQogIDxnIGZpbGwtcnVsZT0iZXZlbm9kZCI+DQogICA8cGF0aCBkPSJtMjUgNi41NWMtMC44Nzc2MiAwLTEuNjUzNiAwLjI5MDQ5LTIuMjYxNCAwLjkwMjc4LTAuNjQxMDkgMC42MTIzLTAuOTQ1NjIgMS4zMjEyLTAuOTQ1NjIgMi4xNTkxIDAgMS4yMjQ3IDAuNTczODggMi4xMjcgMS43NTU1IDIuNzM5NC0yLjk2OTIgMy4yODYxLTguNzA3NyA1LjgyMjItOC44MTA5IDEwLjgyOCAwLjAwNzkgMi42NzQ0IDEuNDY2MSA0Ljc2NDEgMy4zMDg0IDYuNzk5NmwtMS4xMTQyIDUuODMzMmMxLjY5NyAwLjU0MTYgMy4wODk4IDAuOTQxNjggNC44Mjc2IDEuMTI4MS0zLjg4MiA0LjU3NjItMTAuNzg3LTEuNzQwMi0xNS4yMDkgMi45MzI2bDIuMzMwMiAzLjU3NzFjNS41OTI4LTMuOTYyIDEzLjM3NCAzLjY3MjkgMTYuMTItMy45NjIxIDIuNzQ1OCA3LjYzNTEgMTAuNTI3IDAuMDAzNyAxNi4xMiAzLjk2MjFsMi4zMjk3LTMuNTc3MWMtNC40MjItNC42NzI5LTExLjMyNyAxLjY0MzYtMTUuMjA5LTIuOTMyNiAxLjczNzgtMC4xODY0IDMuMTMwMy0wLjU4NjUzIDQuODI3My0xLjEyODFsLTEuMTE0Mi01LjgzMzJjMS44NDIzLTIuMDM1NSAzLjMwMTItNC4xMjUyIDMuMzA4NC02Ljc5OTYtMC4xMDMxOS01LjAwNjItNS44NDE3LTcuNTQyMi04LjgxMDktMTAuODI4IDEuMTgxNi0wLjYxMjQgMS43NTU1LTEuNTE0NyAxLjc1NTUtMi43Mzk0IDAtMC44Mzc4LTAuMzA0MDEtMS41NDY4LTAuOTQ1MzYtMi4xNTkxLTAuNjA3NzUtMC42MTIzLTEuMzgzOC0wLjkwMjc4LTIuMjYxNC0wLjkwMjc4eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDI3MjApIiBmaWx0ZXI9InVybCgjZmlsdGVyODQ1KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4NCiAgIDxlbGxpcHNlIGNsYXNzPSJzdDE1IiB0cmFuc2Zvcm09Im1hdHJpeCguMzM3NTcgMCAwIC4zMjIyNyAtODkzLjMzIDEyMi4xNCkiIGN4PSIyNzIwLjMiIGN5PSItMjcxLjQiIHJ4PSIxNi4zIiByeT0iMi41IiBmaWx0ZXI9InVybCgjZmlsdGVyMjgwOS01LTgtNS0xLTQtNy00KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZS13aWR0aD0iLjgwMjE3Ii8+DQogICA8ZWxsaXBzZSBjbGFzcz0ic3QxNSIgY3g9IjI1IiBjeT0iOS42MTE1IiByeD0iMS4xNDAxIiByeT0iMS4xNDc0IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlLXdpZHRoPSIuMjY0NTgiLz4NCiAgPC9nPg0KICA8cGF0aCBkPSJtMjEuMzMzIDIzLjI2Nmg3LjMzM20tMy42NjYzLTMuMzMzOXY2Ljc1MjQiIGZpbGw9Im5vbmUiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS40Ii8+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .rook.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50Mjk5OS0wIiB4MT0iNDU0OCIgeDI9IjQ1NDgiIHkxPSItNjM4Ljc3IiB5Mj0iLTUwNi4wNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMzQyMDggMCAwIC4yODM3IC0xNTMwLjggMTg3LjM5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGZpbHRlciBpZD0iZmlsdGVyODQwIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPg0KICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9InJnYigwLDAsMCkiIGZsb29kLW9wYWNpdHk9Ii40OTgwNCIgcmVzdWx0PSJmbG9vZCIvPg0KICAgPGZlQ29tcG9zaXRlIGluPSJmbG9vZCIgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iIHJlc3VsdD0iY29tcG9zaXRlMSIvPg0KICAgPGZlR2F1c3NpYW5CbHVyIGluPSJjb21wb3NpdGUxIiByZXN1bHQ9ImJsdXIiIHN0ZERldmlhdGlvbj0iMC42Ii8+DQogICA8ZmVPZmZzZXQgZHg9IjEuNiIgZHk9IjEuNCIgcmVzdWx0PSJvZmZzZXQiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJvZmZzZXQiIHJlc3VsdD0iY29tcG9zaXRlMiIvPg0KICA8L2ZpbHRlcj4NCiA8L2RlZnM+DQogPG1ldGFkYXRhPg0KICA8cmRmOlJERj4NCiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4NCiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+DQogICAgPGRjOnRpdGxlLz4NCiAgIDwvY2M6V29yaz4NCiAgPC9yZGY6UkRGPg0KIDwvbWV0YWRhdGE+DQogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDU1IDAgMCAuOTE5OCAtLjEzNjk0IDMuNTA1MSkiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbC1ydWxlPSJldmVub2RkIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iIHN0cm9rZS13aWR0aD0iMS4wMzk4Ij4NCiAgPGcgc3Ryb2tlLXdpZHRoPSIxLjAzOTgiPg0KICAgPHBhdGggY2xhc3M9InN0MTQiIGQ9Im0yMS45MzIgNi41NDY0djIuOTMzNmgtNC4wOTF2LTIuNTg4M2gtNS43OTU1djcuOTc1M2w0LjUzMjYgMy4xNDE4djEyLjU2N2wtMy44NTA4IDIuNDg1OHY1LjIxMzNoLTMuMDY4MnY1LjE3ODhoMzAuNjgydi01LjE3ODhoLTMuMDY4MnYtNS4yMTMzbC0zLjg1MDgtMi40ODU4di0xMi41MzNsNC41MzI2LTMuMjEwOHYtNy45NDA4aC01Ljc5NTV2Mi41ODgzaC00LjQzMTl2LTIuOTMzNmgtMi44OTc4eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDI5OTktMCkiIGZpbHRlcj0idXJsKCNmaWx0ZXI4NDApIiBzdHJva2U9IiMwMTAxMDEiIHN0cm9rZS13aWR0aD0iMS4xNDM4Ii8+DQogIDwvZz4NCiA8L2c+DQogPHBhdGggZD0ibTE4LjgyOSAzMS40MzhoMTEuOTk4IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS40Ii8+DQogPHBhdGggZD0ibTE4LjgyOSAyMC4wMDZoMTEuOTk4IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS40Ii8+DQo8L3N2Zz4NCg==')}
.is2d .queen.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50ODYwMi0zIiB4MT0iLTUxLjE2MyIgeDI9Ii01MS4xNTciIHkxPSItMTAxLjM5IiB5Mj0iLTY0LjczOSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTc2NDMgMCAwIC45OTI4NyA3NC45NTIgMTA3LjczKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGZpbHRlciBpZD0iZmlsdGVyMjgxMy0wLTEtNS0xLTItMS0xLTQtMS0wIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPg0KICAgPGZlR2F1c3NpYW5CbHVyIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjAxIDAuMDEiLz4NCiAgPC9maWx0ZXI+DQogIDxmaWx0ZXIgaWQ9ImZpbHRlcjgzOSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4NCiAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSJyZ2IoMCwwLDApIiBmbG9vZC1vcGFjaXR5PSIuNDk4MDQiIHJlc3VsdD0iZmxvb2QiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iZmxvb2QiIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIiByZXN1bHQ9ImNvbXBvc2l0ZTEiLz4NCiAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iY29tcG9zaXRlMSIgcmVzdWx0PSJibHVyIiBzdGREZXZpYXRpb249IjAuNiIvPg0KICAgPGZlT2Zmc2V0IGR4PSIxLjYiIGR5PSIxLjQiIHJlc3VsdD0ib2Zmc2V0Ii8+DQogICA8ZmVDb21wb3NpdGUgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0ib2Zmc2V0IiByZXN1bHQ9ImNvbXBvc2l0ZTIiLz4NCiAgPC9maWx0ZXI+DQogPC9kZWZzPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxwYXRoIGQ9Im0yNC45OTQgNi41NDg3djUuMDg3ZS00Yy0xLjU2NzcgMC4wMDU4Ny0yLjgzNTQgMS4xODEtMi44MzU4IDIuNjI5IDAuMDAxNiAxLjE5MzMgMC44NzI5MiAyLjIzNiAyLjEyMjMgMi41Mzk3LTAuNjg4OTYgNC40NDk1LTEuOTY3IDkuNzI2NC0yLjYzNDkgMTQuMTEybC00LjA2OTEtMTIuOTI3YzAuOTY3MTktMC40NDQyNCAxLjU3ODktMS4zNTU4IDEuNTc5NC0yLjM1MzUtOC4xZS01IC0xLjQ1MjItMS4yNzQ2LTIuNjI5NS0yLjg0NjktMi42Mjk1LTEuNTcyMyA1Ljg3ZS01IC0yLjg0NjggMS4xNzczLTIuODQ2OSAyLjYyOTUgMC4wMDE5IDEuMjA1MyAwLjg5MDYzIDIuMjU1MSAyLjE1NjYgMi41NDc0bC0wLjQzODg5IDEzLjI1OC01LjQ4My0xMC42MTFjMC45NTExNi0wLjQ0OTc5IDEuNTQ5NS0xLjM1MzcgMS41NDk2LTIuMzQwNy04ZS01IC0xLjQ1MjItMS4yNzQ2LTIuNjI5NC0yLjg0NjktMi42Mjk1LTEuNTcyMyA2ZS01IC0yLjg0NjggMS4xNzczLTIuODQ2OSAyLjYyOTUgOS4wNTVlLTQgMS4zMzQ2IDEuMDg0MSAyLjQ1NyAyLjUxOTQgMi42MTA1bDIuNzU5MyAxNi41MDcgNC4wNTA3IDUuMjU4NS0xLjAwNDYgMy42MzQxYy0wLjA0MTk5IDAuNjU1MzkgNC44NDgyIDIuMDI3MiAxMS4xMjIgMi4wMzk1IDYuMjczOS0wLjAxMjI4IDExLjE2NC0xLjM4NDEgMTEuMTIyLTIuMDM5NWwtMS4wMDQ2LTMuNjM0MSA0LjA1MDctNS4yNTg1IDIuNzU5NC0xNi41MDdjMS40MzUzLTAuMTUzNTggMi41MTg1LTEuMjc1OSAyLjUxOTQtMi42MTA1LTguMWUtNSAtMS40NTIyLTEuMjc0Ni0yLjYyOTQtMi44NDY5LTIuNjI5NS0xLjU3MjIgNy4yZS01IC0yLjg0NjggMS4xNzczLTIuODQ2OSAyLjYyOTUgMi4zZS01IDAuOTg3IDAuNTk4NDEgMS44OTA5IDEuNTQ5NiAyLjM0MDdsLTUuNDgzIDEwLjYxMS0wLjQzODg5LTEzLjI1OGMxLjI2Ni0wLjI5MjI5IDIuMTU0Ny0xLjM0MjEgMi4xNTY2LTIuNTQ3NC04LjFlLTUgLTEuNDUyMi0xLjI3NDYtMi42Mjk1LTIuODQ2OS0yLjYyOTUtMS41NzIzIDUuODdlLTUgLTIuODQ2OCAxLjE3NzMtMi44NDY5IDIuNjI5NSA0LjU4ZS00IDAuOTk3NzEgMC42MTIxNyAxLjkwOTIgMS41Nzk0IDIuMzUzNWwtNC4wNjkxIDEyLjkyN2MtMC42Njc5MS00LjM4NTYtMS45NDYtOS42NjI1LTIuNjM0OS0xNC4xMTIgMS4yNDk0LTAuMzAzNzUgMi4xMjA3LTEuMzQ2NCAyLjEyMjMtMi41Mzk3LTMuNjhlLTQgLTEuNDQ4LTEuMjY4MS0yLjYyMzMtMi44MzU4LTIuNjI5di01LjA4N2UtNGwtMC4wMDU1IDUuMDg3ZS00IC0wLjAwNTUtNS4wODdlLTR6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50ODYwMi0zKSIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjgzOSkiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuMSIgc3R5bGU9InBhaW50LW9yZGVyOm5vcm1hbCIvPg0KIDxlbGxpcHNlIGNsYXNzPSJzdDE1IiB0cmFuc2Zvcm09Im1hdHJpeCguMjc5MTQgMCAwIC4zOTA2MyAtMTI4OS40IDEwMjQuMSkiIGN4PSI0NzA4LjciIGN5PSItMjUxNy42IiByeD0iMzIuMTI2IiByeT0iMi44NDQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWx0ZXI9InVybCgjZmlsdGVyMjgxMy0wLTEtNS0xLTItMS0xLTQtMS0wKSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIi8+DQogPHBhdGggZD0ibTE1LjE3MiAzNC4wNzZzMi42OTkxLTEuMjQ4NyA5LjgwMjItMS4yNTU4YzcuMTAzMS0wLjAwOTUgOS44MDA3IDEuMjU1OCA5LjgwMDcgMS4yNTU4IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz4NCjwvc3ZnPg0K')}
.is2d .king.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50Mjk4MSIgeDE9IjM1MDEiIHgyPSIzNTAxIiB5MT0iLTI0NjYiIHkyPSItMjQyOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTk5OTcgMCAwIDEuMDI3MSAtMzQ3NS45IDI1MzcuOCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2U2ZTZlNiIgb2Zmc2V0PSIxIi8+DQogIDwvbGluZWFyR3JhZGllbnQ+DQogIDxmaWx0ZXIgaWQ9ImZpbHRlcjI4MTMtMC0xLTItOS0yLTMtNy0yLTMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQogICA8ZmVHYXVzc2lhbkJsdXIgcmVzdWx0PSJibHVyIiBzdGREZXZpYXRpb249IjAuMDEgMC4wMSIvPg0KICA8L2ZpbHRlcj4NCiAgPGZpbHRlciBpZD0iZmlsdGVyODM5IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPg0KICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9InJnYigwLDAsMCkiIGZsb29kLW9wYWNpdHk9Ii40OTgwNCIgcmVzdWx0PSJmbG9vZCIvPg0KICAgPGZlQ29tcG9zaXRlIGluPSJmbG9vZCIgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iIHJlc3VsdD0iY29tcG9zaXRlMSIvPg0KICAgPGZlR2F1c3NpYW5CbHVyIGluPSJjb21wb3NpdGUxIiByZXN1bHQ9ImJsdXIiIHN0ZERldmlhdGlvbj0iMC42Ii8+DQogICA8ZmVPZmZzZXQgZHg9IjEuNiIgZHk9IjEuNCIgcmVzdWx0PSJvZmZzZXQiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJvZmZzZXQiIHJlc3VsdD0iY29tcG9zaXRlMiIvPg0KICA8L2ZpbHRlcj4NCiA8L2RlZnM+DQogPG1ldGFkYXRhPg0KICA8cmRmOlJERj4NCiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4NCiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+DQogICAgPGRjOnRpdGxlLz4NCiAgIDwvY2M6V29yaz4NCiAgPC9yZGY6UkRGPg0KIDwvbWV0YWRhdGE+DQogPHBhdGggZD0ibTIzLjMyNSA1LjU1djMuMTQ3MmgtMy4yNzkzdjIuODM4MWgzLjI3OTl2MS43MDkzYy0zLjI4MjggMi4wNjc4LTIuOTE5OCA2LjYzODYtMi45MTk4IDYuNjM4Ni0xMS40MzItOS4xNTM3LTIxLjQxMiA1Ljc3NjUtNy43NDM5IDEyLjY4OXY4LjQ5MDdjMCAwLjkyMjU1IDUuNTIzOSAyLjM4NzEgMTIuMzM4IDIuMzg3MiA2LjgxNCAwIDEyLjMzOS0xLjQ2NDYgMTIuMzM5LTIuMzg3MnYtOC40OTA3YzEzLjY2OC02LjkxMjcgMy42ODc5LTIxLjg0Mi03Ljc0NC0xMi42ODkgMCAwIDAuMzYyODktNC41NzA4LTIuOTItNi42Mzg2di0xLjcwOTNoMy4yNzk0di0yLjgzODFoLTMuMjc5NHYtMy4xNDcyaC0xLjY3NDF6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQyOTgxKSIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWx0ZXI9InVybCgjZmlsdGVyODM5KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIi8+DQogPGVsbGlwc2UgY2xhc3M9InN0MTUiIHRyYW5zZm9ybT0ibWF0cml4KC4zMjIzMiAwIDAgLjQxMDQ3IDIuMDkwNSAtMTMuODUzKSIgY3g9IjcxLjA3NyIgY3k9IjEzMS41NCIgcng9IjMyLjEyNiIgcnk9IjIuODQ0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjI4MTMtMC0xLTItOS0yLTMtNy0yLTMpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iIHN0cm9rZS13aWR0aD0iLjcyNzM5Ii8+DQogPHBhdGggZD0ibTI2LjkwNyAyOS4yNjZjLTAuMDU4LTYuNTcwMiA5LjgyNy0xMC42NDUgMTIuOTYtNi45ODE3IDIuNjYxMSAzLjM2NjgtNC4wODU4IDguMTIyMi00LjA4NTggOC4xMjIycy01LjQ2MzQtMS4wMDktMTAuNzgxLTEuMDA5Yy01LjMxNzIgMC0xMC43ODEgMS4wMDktMTAuNzgxIDEuMDA5cy02Ljc0NjgtNC43NTU0LTQuMDg1Ny04LjEyMjJjMy4xMzI4LTMuNjYzNSAxMy4wMTggMC40MTE0NiAxMi45NiA2Ljk4MTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJiZXZlbCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4NCjwvc3ZnPg0K')}
.is2d .pawn.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MzAwMS0wIiB4MT0iNDE4MS42IiB4Mj0iNDE4MS42IiB5MT0iLTI2MTguNiIgeTI9Ii0yNDk2LjIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjI2NzQ5IDAgMCAuMjY3OTkgLTEwOTMuNSA3MTMuMTEpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjM2MzYzNjIiBvZmZzZXQ9IjAiLz4NCiAgIDxzdG9wIG9mZnNldD0iMSIvPg0KICA8L2xpbmVhckdyYWRpZW50Pg0KICA8ZmlsdGVyIGlkPSJmaWx0ZXI4MzUiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQogICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0icmdiKDAsMCwwKSIgZmxvb2Qtb3BhY2l0eT0iLjQ5ODA0IiByZXN1bHQ9ImZsb29kIi8+DQogICA8ZmVDb21wb3NpdGUgaW49ImZsb29kIiBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIgcmVzdWx0PSJjb21wb3NpdGUxIi8+DQogICA8ZmVHYXVzc2lhbkJsdXIgaW49ImNvbXBvc2l0ZTEiIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjYiLz4NCiAgIDxmZU9mZnNldCBkeD0iMS42IiBkeT0iMS40IiByZXN1bHQ9Im9mZnNldCIvPg0KICAgPGZlQ29tcG9zaXRlIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9Im9mZnNldCIgcmVzdWx0PSJjb21wb3NpdGUyIi8+DQogIDwvZmlsdGVyPg0KIDwvZGVmcz4NCiA8bWV0YWRhdGE+DQogIDxyZGY6UkRGPg0KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPg0KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4NCiAgICA8ZGM6dGl0bGUvPg0KICAgPC9jYzpXb3JrPg0KICA8L3JkZjpSREY+DQogPC9tZXRhZGF0YT4NCiA8cGF0aCBjbGFzcz0ic3QzMSIgZD0ibTI1LjAxOSA0My40NWgtMTMuNDM5Yy0yLjQ2NTktNS43MjM4IDQuMDcyMS0xMS4wMyA4LjY2NzYtMTIuODMyLTUuNDkyMi0zLjA3MzgtMi41MTQ4LTEwLjkxMSAyLjE5MjctMTEuNTQ3LTEuMTIwOS0wLjc0MTk2LTEuNjgxMy0yLjMyNzItMS42ODEzLTMuNTk5MiAwLTEuMDYgMC40NDgzNi0yLjAxNCAxLjIzMjktMi43NTU5IDAuNzg0NjMtMC43NDE5NiAxLjc5MzQtMS4xNjU5IDMuMDI2My0xLjE2NTkgMS4xMjA4IDAgMi4xMjk2IDAuNDIzOTYgMy4wMjYzIDEuMTY1OSAwLjc4NDYgMC43NDE5NiAxLjIzMjkgMS42OTU5IDEuMjMyOSAyLjc1NTkgMCAxLjI3MTktMC41NjA0NSAyLjg1NzMtMS42ODE0IDMuNTk5MiA1LjE1NTkgMi4wMTM5IDcuMDEyNSA5LjQyNyAyLjE5MjggMTEuNTQ3IDYuMjc2NyAyLjIyNTkgMTAuNjg1IDcuODUwMSA4LjY2NzYgMTIuODMyeiIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MzAwMS0wKSIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWx0ZXI9InVybCgjZmlsdGVyODM1KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiBzdHJva2U9IiMwMTAxMDEiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS4xIi8+DQo8L3N2Zz4NCg==')}
.is2d .knight.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTg0MSIgeDE9IjEwNzIwIiB4Mj0iMTA3MjIiIHkxPSItODE2My42IiB5Mj0iLTgwMjUuMyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjY2NzEgMCAwIC4yNjUxNSAtMjgzNS4yIDIxNzEuMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzYzNjM2MiIG9mZnNldD0iMCIvPg0KICAgPHN0b3Agb2Zmc2V0PSIxIi8+DQogIDwvbGluZWFyR3JhZGllbnQ+DQogIDxmaWx0ZXIgaWQ9ImZpbHRlcjg0NyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4NCiAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSJyZ2IoMCwwLDApIiBmbG9vZC1vcGFjaXR5PSIuNDk4MDQiIHJlc3VsdD0iZmxvb2QiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iZmxvb2QiIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIiByZXN1bHQ9ImNvbXBvc2l0ZTEiLz4NCiAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iY29tcG9zaXRlMSIgcmVzdWx0PSJibHVyIiBzdGREZXZpYXRpb249IjAuNiIvPg0KICAgPGZlT2Zmc2V0IGR4PSIxLjYiIGR5PSIxLjQiIHJlc3VsdD0ib2Zmc2V0Ii8+DQogICA8ZmVDb21wb3NpdGUgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0ib2Zmc2V0IiByZXN1bHQ9ImNvbXBvc2l0ZTIiLz4NCiAgPC9maWx0ZXI+DQogPC9kZWZzPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxwYXRoIGQ9Im0yMS42NSAxMC4yNDYtMi45OTk0LTAuMDMxNnMtMC45MzQ1Ni0yLjg2MDUtMy4yNDQ4LTIuNjc4OGMtMC43ODkyIDEuMjI4OSAwLjYwNjIzIDQuODQ4OCAwLjYwNjIzIDQuODQ4OGwtMS4zODI2IDEuNDgxNXMtOC4wNzM3IDEyLjM5NC04LjA3MzcgMTQuNjg2Yy0wLjE2NTM2IDMuNzUxOCAzLjQ2MDkgNC45NzM5IDUuNzU5OSA1LjczMDcgMi41MTExIDAuMzg5NjYgNC4wOTE5LTMuNDc4NCA3LjU0NzQtNS43NzA1IDMuNDQ3My0xLjg4MyA0LjEzNTQtMS45MyA2LjIxMzYtMy41NTQtMi4zNjA0IDEyLjAxMS05LjczNDUgOC41MzQ3LTkuMTUzNiAxOC40OTNoMjYuNDk0YzAuNTcwNzYtMjMuODQ3LTYuMjEzMS0zMS45MzgtMTguMTA0LTMzLjE5OS0wLjA1MTcwNC0xLjUzMiAwLjI0Mjk3LTQuMTc5NS0xLjMyOC0zLjY0NTEtMS41NzA5IDAuNTM0NDUtMi4zMzUxIDMuNjM5NC0yLjMzNTEgMy42Mzk0eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDE4NDEpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbHRlcj0idXJsKCNmaWx0ZXI4NDcpIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4NCiA8cGF0aCBkPSJtMTUuNzYxIDE5LjEzMnMwLjQ1NzM2LTIuMzY4IDMuMTA2OC0yLjc3NjMiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2U2ZTZlNiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNCIvPg0KIDxlbGxpcHNlIGN4PSIxNy43OTkiIGN5PSIxOC4zNTYiIHJ4PSIxLjE1MDYiIHJ5PSIxLjA2NTIiIGZpbGw9IiNlNmU2ZTYiIHN0eWxlPSJwYWludC1vcmRlcjptYXJrZXJzIGZpbGwgc3Ryb2tlIi8+DQogPHBhdGggZD0ibTExLjE2MyAzMy4xMzRzMS42MTU0LTAuOTM0MjQgMi4xMzczLTIuMjYxOSIgc3Ryb2tlPSIjZTZlNmU2IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS13aWR0aD0iMS4xIi8+DQogPHBhdGggZD0ibTI1LjU2NSAxMy4wMzJjMi4zNTUgMC4xNTAxNCAxNS4yNTEgMC45MTgxNCAxNC42OTEgMjcuODYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2U2ZTZlNiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4NCiA8cGF0aCBkPSJtOS4xMjQgMjguODc5cy01ZS0zIC0wLjc1NzkyIDEuMDU1Mi0xLjE3OTQiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2U2ZTZlNiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNCIvPg0KPC9zdmc+DQo=')}
.is2d .bishop.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjcyMC01IiB4MT0iMTMyNjkiIHgyPSIxMzI2OSIgeTE9Ii05NjYyLjciIHkyPSItOTUxOSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjY0NTggMCAwIC4yNjQ1OCAtMzQ4NS43IDI1NjIuNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzYzNjM2MiIG9mZnNldD0iMCIvPg0KICAgPHN0b3Agb2Zmc2V0PSIxIi8+DQogIDwvbGluZWFyR3JhZGllbnQ+DQogIDxmaWx0ZXIgaWQ9ImZpbHRlcjI4MDktNS04LTUtMS00LTctNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4NCiAgIDxmZUdhdXNzaWFuQmx1ciByZXN1bHQ9ImJsdXIiIHN0ZERldmlhdGlvbj0iMC4wMSAwLjAxIi8+DQogIDwvZmlsdGVyPg0KICA8ZmlsdGVyIGlkPSJmaWx0ZXI4NDUiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQogICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0icmdiKDAsMCwwKSIgZmxvb2Qtb3BhY2l0eT0iLjQ5ODA0IiByZXN1bHQ9ImZsb29kIi8+DQogICA8ZmVDb21wb3NpdGUgaW49ImZsb29kIiBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIgcmVzdWx0PSJjb21wb3NpdGUxIi8+DQogICA8ZmVHYXVzc2lhbkJsdXIgaW49ImNvbXBvc2l0ZTEiIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjYiLz4NCiAgIDxmZU9mZnNldCBkeD0iMS42IiBkeT0iMS40IiByZXN1bHQ9Im9mZnNldCIvPg0KICAgPGZlQ29tcG9zaXRlIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9Im9mZnNldCIgcmVzdWx0PSJjb21wb3NpdGUyIi8+DQogIDwvZmlsdGVyPg0KIDwvZGVmcz4NCiA8bWV0YWRhdGE+DQogIDxyZGY6UkRGPg0KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPg0KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4NCiAgICA8ZGM6dGl0bGUvPg0KICAgPC9jYzpXb3JrPg0KICA8L3JkZjpSREY+DQogPC9tZXRhZGF0YT4NCiA8ZyBjbGlwLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPGcgZmlsbC1ydWxlPSJldmVub2RkIj4NCiAgIDxwYXRoIGQ9Im0yNSA2LjU1Yy0wLjg3NzYgMC0xLjY1MzYgMC4yOTA1LTIuMjYxNCAwLjkwMjgtMC42NDEgMC42MTIzLTAuOTQ1NiAxLjMyMTItMC45NDU2IDIuMTU5IDAgMS4yMjQ4IDAuNTczOSAyLjEyNyAxLjc1NTUgMi43Mzk0LTIuOTY5MSAzLjI4NjEtOC43MDc3IDUuODIyMi04LjgxMDkgMTAuODI4IDAuMDEgMi42NzQ0IDEuNDY2MSA0Ljc2NDEgMy4zMDg0IDYuNzk5NmwtMS4xMTQyIDUuODMzMmMxLjY5NzEgMC41NDE2IDMuMDg5OCAwLjk0MTcgNC44Mjc2IDEuMTI4MS0zLjg4MTkgNC41NzYyLTEwLjc4Ny0xLjc0MDItMTUuMjA5IDIuOTMyNmwyLjMzMDIgMy41NzcxYzUuNTkyOC0zLjk2MiAxMy4zNzQgMy42NzI5IDE2LjEyLTMuOTYyMSAyLjc0NTkgNy42MzUxIDEwLjUyNyAwIDE2LjEyIDMuOTYyMWwyLjMyOTctMy41NzcxYy00LjQyMi00LjY3MjgtMTEuMzI3IDEuNjQzNi0xNS4yMDktMi45MzI2IDEuNzM3Ny0wLjE4NjQgMy4xMzAyLTAuNTg2NSA0LjgyNzMtMS4xMjgxbC0xLjExNDItNS44MzMyYzEuODQyMy0yLjAzNTUgMy4zMDEyLTQuMTI1MiAzLjMwODQtNi43OTk2LTAuMTAzMi01LjAwNjItNS44NDE4LTcuNTQyMi04LjgxMDktMTAuODI4IDEuMTgxNi0wLjYxMjQgMS43NTU1LTEuNTE0NiAxLjc1NTUtMi43Mzk0IDAtMC44Mzc4LTAuMzA0LTEuNTQ2Ny0wLjk0NTQtMi4xNTktMC42MDc3LTAuNjEyMy0xLjM4MzctMC45MDI4LTIuMjYxNC0wLjkwMjh6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MjcyMC01KSIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjg0NSkiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS4xIi8+DQogICA8ZWxsaXBzZSBjbGFzcz0ic3QxNSIgdHJhbnNmb3JtPSJtYXRyaXgoLjMzNzU3IDAgMCAuMzIyMjcgLTg5My4zMyAxMjIuMTQpIiBjeD0iMjcyMC4zIiBjeT0iLTI3MS40IiByeD0iMTYuMyIgcnk9IjIuNSIgZmlsbD0iI2U2ZTZlNiIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjI4MDktNS04LTUtMS00LTctNSkiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2Utd2lkdGg9Ii44MDIxNyIvPg0KICAgPGVsbGlwc2UgY2xhc3M9InN0MTUiIGN4PSIyNSIgY3k9IjkuNjExNyIgcng9IjEuMTQwMSIgcnk9IjEuMTQ3NCIgZmlsbD0iI2U2ZTZlNiIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZS13aWR0aD0iLjI2NDU4Ii8+DQogIDwvZz4NCiAgPHBhdGggZD0ibTIxLjMzMyAyMy4yNjZoNy4zMzNtLTMuNjY2My0zLjMzMzl2Ni43NTI0IiBmaWxsPSJub25lIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlPSIjZTZlNmU2IiBzdHJva2Utd2lkdGg9IjEuNCIvPg0KIDwvZz4NCjwvc3ZnPg0K')}
.is2d .rook.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50Mjk5OS0xIiB4MT0iNDU0OCIgeDI9IjQ1NDgiIHkxPSItNjM4Ljc3IiB5Mj0iLTUwNi4wNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMzQyMDggMCAwIC4yODM3IC0xNTMwLjggMTg3LjM5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzNjM2MzYyIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGZpbHRlciBpZD0iZmlsdGVyODQyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPg0KICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9InJnYigwLDAsMCkiIGZsb29kLW9wYWNpdHk9Ii40OTgwNCIgcmVzdWx0PSJmbG9vZCIvPg0KICAgPGZlQ29tcG9zaXRlIGluPSJmbG9vZCIgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iIHJlc3VsdD0iY29tcG9zaXRlMSIvPg0KICAgPGZlR2F1c3NpYW5CbHVyIGluPSJjb21wb3NpdGUxIiByZXN1bHQ9ImJsdXIiIHN0ZERldmlhdGlvbj0iMC42Ii8+DQogICA8ZmVPZmZzZXQgZHg9IjEuNiIgZHk9IjEuNCIgcmVzdWx0PSJvZmZzZXQiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJvZmZzZXQiIHJlc3VsdD0iY29tcG9zaXRlMiIvPg0KICA8L2ZpbHRlcj4NCiA8L2RlZnM+DQogPG1ldGFkYXRhPg0KICA8cmRmOlJERj4NCiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4NCiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+DQogICAgPGRjOnRpdGxlLz4NCiAgICA8Y2M6bGljZW5zZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLW5kLzQuMC8iLz4NCiAgIDwvY2M6V29yaz4NCiAgIDxjYzpMaWNlbnNlIHJkZjphYm91dD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMtbmQvNC4wLyI+DQogICAgPGNjOnBlcm1pdHMgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNSZXByb2R1Y3Rpb24iLz4NCiAgICA8Y2M6cGVybWl0cyByZGY6cmVzb3VyY2U9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zI0Rpc3RyaWJ1dGlvbiIvPg0KICAgIDxjYzpyZXF1aXJlcyByZGY6cmVzb3VyY2U9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zI05vdGljZSIvPg0KICAgIDxjYzpyZXF1aXJlcyByZGY6cmVzb3VyY2U9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zI0F0dHJpYnV0aW9uIi8+DQogICAgPGNjOnByb2hpYml0cyByZGY6cmVzb3VyY2U9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zI0NvbW1lcmNpYWxVc2UiLz4NCiAgIDwvY2M6TGljZW5zZT4NCiAgPC9yZGY6UkRGPg0KIDwvbWV0YWRhdGE+DQogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMwMDcuOSAyMTM2LjYpIj4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDU1IDAgMCAuOTE5OCAzMDA3LjcgLTIxMzMuMSkiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbC1ydWxlPSJldmVub2RkIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iIHN0cm9rZS13aWR0aD0iMS4wMzk4Ij4NCiAgIDxnIHN0cm9rZS13aWR0aD0iMS4wMzk4Ij4NCiAgICA8cGF0aCBjbGFzcz0ic3QxNCIgZD0ibTIxLjkzMiA2LjU0NjR2Mi45MzM2aC00LjA5MXYtMi41ODgzaC01Ljc5NTV2Ny45NzUzbDQuNTMyNiAzLjE0MTh2MTIuNTY3bC0zLjg1MDggMi40ODU4djUuMjEzM2gtMy4wNjgydjUuMTc4OGgzMC42ODJ2LTUuMTc4OGgtMy4wNjgydi01LjIxMzNsLTMuODUwOC0yLjQ4NTh2LTEyLjUzM2w0LjUzMjYtMy4yMTA4di03Ljk0MDhoLTUuNzk1NXYyLjU4ODNoLTQuNDMxOXYtMi45MzM2aC0yLjg5Nzh6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50Mjk5OS0xKSIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjg0MikiIHN0cm9rZT0iIzAxMDEwMSIgc3Ryb2tlLXdpZHRoPSIxLjE0MzgiLz4NCiAgIDwvZz4NCiAgPC9nPg0KICA8cGF0aCBkPSJtMzAyNi43LTIxMDUuMmgxMS45OTgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2U2ZTZlNiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4NCiAgPHBhdGggZD0ibTMwMjYuNy0yMTE2LjZoMTEuOTk4IiBmaWxsPSJub25lIiBzdHJva2U9IiNlNmU2ZTYiIHN0cm9rZS13aWR0aD0iMS40Ii8+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .queen.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50ODY4NC00IiB4MT0iLTUxLjE2MyIgeDI9Ii01MS4xNTciIHkxPSItMTAxLjM5IiB5Mj0iLTY0LjczOSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTc2NDQgMCAwIC45OTI4NiA3NC45NTIgMTA3LjczKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzNjM2MzYyIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGZpbHRlciBpZD0iZmlsdGVyMjgxMy0wLTEtNS0xLTItMS0xLTQtMS0wLTMtNiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4NCiAgIDxmZUdhdXNzaWFuQmx1ciByZXN1bHQ9ImJsdXIiIHN0ZERldmlhdGlvbj0iMC4wMSAwLjAxIi8+DQogIDwvZmlsdGVyPg0KICA8ZmlsdGVyIGlkPSJmaWx0ZXI4MzkiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQogICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0icmdiKDAsMCwwKSIgZmxvb2Qtb3BhY2l0eT0iLjQ5ODA0IiByZXN1bHQ9ImZsb29kIi8+DQogICA8ZmVDb21wb3NpdGUgaW49ImZsb29kIiBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIgcmVzdWx0PSJjb21wb3NpdGUxIi8+DQogICA8ZmVHYXVzc2lhbkJsdXIgaW49ImNvbXBvc2l0ZTEiIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjYiLz4NCiAgIDxmZU9mZnNldCBkeD0iMS42IiBkeT0iMS40IiByZXN1bHQ9Im9mZnNldCIvPg0KICAgPGZlQ29tcG9zaXRlIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9Im9mZnNldCIgcmVzdWx0PSJjb21wb3NpdGUyIi8+DQogIDwvZmlsdGVyPg0KIDwvZGVmcz4NCiA8bWV0YWRhdGE+DQogIDxyZGY6UkRGPg0KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPg0KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4NCiAgICA8ZGM6dGl0bGUvPg0KICAgPC9jYzpXb3JrPg0KICA8L3JkZjpSREY+DQogPC9tZXRhZGF0YT4NCiA8cGF0aCBkPSJtMjQuOTk0IDYuNTQ4OHY1LjA4NmUtNGMtMS41Njc3IDAuMDA1ODctMi44MzU0IDEuMTgxLTIuODM1OCAyLjYyOSAwLjAwMTYgMS4xOTMzIDAuODcyOTIgMi4yMzYgMi4xMjIzIDIuNTM5Ny0wLjY4ODk2IDQuNDQ5NS0xLjk2NyA5LjcyNjQtMi42MzQ5IDE0LjExMmwtNC4wNjkxLTEyLjkyN2MwLjk2NzE5LTAuNDQ0MjQgMS41Nzg5LTEuMzU1OCAxLjU3OTQtMi4zNTM1LTguMWUtNSAtMS40NTIyLTEuMjc0Ni0yLjYyOTQtMi44NDY5LTIuNjI5NS0xLjU3MjMgNS44N2UtNSAtMi44NDY4IDEuMTc3My0yLjg0NjkgMi42Mjk1IDAuMDAxOSAxLjIwNTMgMC44OTA2MyAyLjI1NTEgMi4xNTY2IDIuNTQ3NGwtMC40Mzg4OSAxMy4yNTgtNS40ODMtMTAuNjExYzAuOTUxMTctMC40NDk3OSAxLjU0OTYtMS4zNTM3IDEuNTQ5Ni0yLjM0MDctOGUtNSAtMS40NTIyLTEuMjc0Ni0yLjYyOTQtMi44NDY5LTIuNjI5NS0xLjU3MjMgNS45ZS01IC0yLjg0NjggMS4xNzczLTIuODQ2OSAyLjYyOTUgOS4wNTRlLTQgMS4zMzQ2IDEuMDg0MSAyLjQ1NyAyLjUxOTQgMi42MTA1bDIuNzU5NCAxNi41MDcgNC4wNTA3IDUuMjU4NS0xLjAwNDYgMy42MzQxYy0wLjA0MTk5IDAuNjU1MzkgNC44NDgyIDIuMDI3MiAxMS4xMjIgMi4wMzk1IDYuMjczOS0wLjAxMjI4IDExLjE2NC0xLjM4NDEgMTEuMTIyLTIuMDM5NWwtMS4wMDQ2LTMuNjM0MSA0LjA1MDctNS4yNTg1IDIuNzU5NC0xNi41MDdjMS40MzUzLTAuMTUzNTggMi41MTg1LTEuMjc1OSAyLjUxOTQtMi42MTA1LThlLTUgLTEuNDUyMi0xLjI3NDYtMi42Mjk0LTIuODQ2OS0yLjYyOTUtMS41NzIyIDcuMmUtNSAtMi44NDY4IDEuMTc3My0yLjg0NjkgMi42Mjk1IDIuMmUtNSAwLjk4Njk5IDAuNTk4NDEgMS44OTA5IDEuNTQ5NiAyLjM0MDdsLTUuNDgzIDEwLjYxMS0wLjQzODg5LTEzLjI1OGMxLjI2Ni0wLjI5MjI5IDIuMTU0Ny0xLjM0MjEgMi4xNTY2LTIuNTQ3NC04LjFlLTUgLTEuNDUyMi0xLjI3NDYtMi42Mjk0LTIuODQ2OS0yLjYyOTUtMS41NzIzIDUuODdlLTUgLTIuODQ2OCAxLjE3NzMtMi44NDY5IDIuNjI5NSA0LjU4ZS00IDAuOTk3NzEgMC42MTIxNyAxLjkwOTIgMS41Nzk0IDIuMzUzNWwtNC4wNjkxIDEyLjkyN2MtMC42Njc5MS00LjM4NTYtMS45NDYtOS42NjI0LTIuNjM0OS0xNC4xMTIgMS4yNDk0LTAuMzAzNzUgMi4xMjA3LTEuMzQ2NCAyLjEyMjMtMi41Mzk3LTMuNjhlLTQgLTEuNDQ4LTEuMjY4MS0yLjYyMzMtMi44MzU4LTIuNjI5di01LjA4NmUtNGwtMC4wMDU1IDUuMDg2ZS00IC0wLjAwNTUtNS4wODZlLTR6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50ODY4NC00KSIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjgzOSkiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuMSIgc3R5bGU9InBhaW50LW9yZGVyOm5vcm1hbCIvPg0KIDxlbGxpcHNlIGNsYXNzPSJzdDE1IiB0cmFuc2Zvcm09Im1hdHJpeCguMjc5MTQgMCAwIC4zOTA2MyAtMTI4OS40IDEwMjQpIiBjeD0iNDcwOC43IiBjeT0iLTI1MTcuNiIgcng9IjMyLjEyNiIgcnk9IjIuODQ0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiNlNmU2ZTYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjI4MTMtMC0xLTUtMS0yLTEtMS00LTEtMC0zLTYpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iLz4NCiA8cGF0aCBkPSJtMTUuMTcyIDM0LjA3NnMyLjY5OTEtMS4yNDg3IDkuODAyMi0xLjI1NThjNy4xMDMxLTAuMDA5NSA5LjgwMDggMS4yNTU4IDkuODAwOCAxLjI1NTgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2U2ZTZlNiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIGZpbGwgbWFya2VycyIvPg0KPC9zdmc+DQo=')}
.is2d .king.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50Mjk4MS0zIiB4MT0iMzUwMSIgeDI9IjM1MDEiIHkxPSItMjQ2NiIgeTI9Ii0yNDI4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC45OTk5NyAwIDAgMS4wMjcxIC0zNDc1LjkgMjUzNy44KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzNjM2MzYyIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGZpbHRlciBpZD0iZmlsdGVyMjgxMy0wLTEtMi05LTItMy03LTItNy01IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPg0KICAgPGZlR2F1c3NpYW5CbHVyIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjAxIDAuMDEiLz4NCiAgPC9maWx0ZXI+DQogIDxmaWx0ZXIgaWQ9ImZpbHRlcjgzOSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4NCiAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSJyZ2IoMCwwLDApIiBmbG9vZC1vcGFjaXR5PSIuNDk4MDQiIHJlc3VsdD0iZmxvb2QiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iZmxvb2QiIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIiByZXN1bHQ9ImNvbXBvc2l0ZTEiLz4NCiAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iY29tcG9zaXRlMSIgcmVzdWx0PSJibHVyIiBzdGREZXZpYXRpb249IjAuNiIvPg0KICAgPGZlT2Zmc2V0IGR4PSIxLjYiIGR5PSIxLjQiIHJlc3VsdD0ib2Zmc2V0Ii8+DQogICA8ZmVDb21wb3NpdGUgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0ib2Zmc2V0IiByZXN1bHQ9ImNvbXBvc2l0ZTIiLz4NCiAgPC9maWx0ZXI+DQogPC9kZWZzPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxwYXRoIGQ9Im0yMy4zMjQgNS41NDk3djMuMTQ3MmgtMy4yNzkzdjIuODM4MWgzLjI3OTl2MS43MDkzYy0zLjI4MjggMi4wNjc4LTIuOTE5OCA2LjYzODYtMi45MTk4IDYuNjM4Ni0xMS40MzItOS4xNTM3LTIxLjQxMiA1Ljc3NjUtNy43NDM5IDEyLjY4OXY4LjQ5MDdjMCAwLjkyMjU1IDUuNTIzOSAyLjM4NzEgMTIuMzM4IDIuMzg3MiA2LjgxNCAwIDEyLjMzOS0xLjQ2NDYgMTIuMzM5LTIuMzg3MnYtOC40OTA3YzEzLjY2OC02LjkxMjcgMy42ODc5LTIxLjg0Mi03Ljc0NC0xMi42ODkgMCAwIDAuMzYyODktNC41NzA4LTIuOTItNi42Mzg2di0xLjcwOTNoMy4yNzk0di0yLjgzODFoLTMuMjc5NHYtMy4xNDcyaC0xLjY3NDF6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQyOTgxLTMpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbHRlcj0idXJsKCNmaWx0ZXI4MzkpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4NCiA8ZWxsaXBzZSBjbGFzcz0ic3QxNSIgdHJhbnNmb3JtPSJtYXRyaXgoLjMyMjMyIDAgMCAuNDEwNDcgMi4wODk3IC0xMy44NTMpIiBjeD0iNzEuMDc3IiBjeT0iMTMxLjU0IiByeD0iMzIuMTI2IiByeT0iMi44NDQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbD0iI2U2ZTZlNiIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWx0ZXI9InVybCgjZmlsdGVyMjgxMy0wLTEtMi05LTItMy03LTItNy01KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiBzdHJva2Utd2lkdGg9Ii43MjczOSIvPg0KIDxwYXRoIGQ9Im0yNi45MDYgMjkuMjY2Yy0wLjA1OC02LjU3MDIgOS44MjctMTAuNjQ1IDEyLjk2LTYuOTgxNyAyLjY2MTEgMy4zNjY4LTQuMDg1OCA4LjEyMjItNC4wODU4IDguMTIyMnMtNS40NjM0LTEuMDA5LTEwLjc4MS0xLjAwOWMtNS4zMTcyIDAtMTAuNzgxIDEuMDA5LTEwLjc4MSAxLjAwOXMtNi43NDY4LTQuNzU1NC00LjA4NTctOC4xMjIyYzMuMTMyOC0zLjY2MzUgMTMuMDE4IDAuNDExNDYgMTIuOTYgNi45ODE3IiBmaWxsPSJub25lIiBzdHJva2U9IiNlNmU2ZTYiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWwiIHN0cm9rZS13aWR0aD0iMS40Ii8+DQo8L3N2Zz4NCg==')}
.is2d .pawn.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MzAwOS0zIiB4MT0iNDEyNy4zIiB4Mj0iNDIzNS43IiB5MT0iLTI1NTguNCIgeTI9Ii0yNTU4LjQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjI3Njc3IDAgMCAuMjc1NTUgLTExMzIuMyA3MzEuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlNmU2ZTYiIG9mZnNldD0iMSIvPg0KICA8L2xpbmVhckdyYWRpZW50Pg0KICA8ZmlsdGVyIGlkPSJmaWx0ZXI4MzQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQogICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0icmdiKDAsMCwwKSIgZmxvb2Qtb3BhY2l0eT0iLjQ5ODA0IiByZXN1bHQ9ImZsb29kIi8+DQogICA8ZmVDb21wb3NpdGUgaW49ImZsb29kIiBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIgcmVzdWx0PSJjb21wb3NpdGUxIi8+DQogICA8ZmVHYXVzc2lhbkJsdXIgaW49ImNvbXBvc2l0ZTEiIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjMiLz4NCiAgIDxmZU9mZnNldCBkeD0iMSIgZHk9IjEiIHJlc3VsdD0ib2Zmc2V0Ii8+DQogICA8ZmVDb21wb3NpdGUgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0ib2Zmc2V0IiByZXN1bHQ9ImNvbXBvc2l0ZTIiLz4NCiAgPC9maWx0ZXI+DQogPC9kZWZzPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0ibWF0cml4KC45NjY1OCAwIDAgLjk3MjQ1IC44MzM0MiAxLjI0MzEpIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiBzdHJva2Utd2lkdGg9IjEuMDMxNCI+DQogIDxwYXRoIGNsYXNzPSJzdDMxIiBkPSJtMjUuMDI0IDQzLjQwMWgtMTMuOTA1Yy0yLjU1MTQtNS44ODUzIDQuMjEzNC0xMS4zNDEgOC45NjgzLTEzLjE5NC01LjY4MjctMy4xNjA2LTIuNjAyMS0xMS4yMTkgMi4yNjg4LTExLjg3My0xLjE1OTgtMC43NjI5LTEuNzM5Ni0yLjM5MjktMS43Mzk2LTMuNzAwOCAwLTEuMDg5OSAwLjQ2MzkyLTIuMDcwOCAxLjI3NTctMi44MzM3IDAuODExODUtMC43NjI5IDEuODU1Ni0xLjE5ODggMy4xMzEzLTEuMTk4OCAxLjE1OTcgMCAyLjIwMzUgMC40MzU5MyAzLjEzMTMgMS4xOTg4IDAuODExODIgMC43NjI5IDEuMjc1NyAxLjc0MzggMS4yNzU3IDIuODMzNyAwIDEuMzA3OC0wLjU3OTg5IDIuOTM3OS0xLjczOTcgMy43MDA4IDUuMzM0OCAyLjA3MDcgNy4yNTU4IDkuNjkzMSAyLjI2ODkgMTEuODczIDYuNDk0NSAyLjI4ODcgMTEuMDU2IDguMDcxNiA4Ljk2ODMgMTMuMTk0eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDMwMDktMykiIGZpbHRlcj0idXJsKCNmaWx0ZXI4MzQpIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS4xMzQ2Ii8+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .knight.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjA4MS05IiB4MT0iMTA2NTMiIHgyPSIxMDc5NSIgeTE9Ii04MDk0LjciIHkyPSItODA5NC43IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4yNjY3MSAwIDAgLjI2NTE1IC0yODM1LjIgMjE3MS4zKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGZpbHRlciBpZD0iZmlsdGVyODQ3IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPg0KICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9InJnYigwLDAsMCkiIGZsb29kLW9wYWNpdHk9Ii40OTgwNCIgcmVzdWx0PSJmbG9vZCIvPg0KICAgPGZlQ29tcG9zaXRlIGluPSJmbG9vZCIgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iIHJlc3VsdD0iY29tcG9zaXRlMSIvPg0KICAgPGZlR2F1c3NpYW5CbHVyIGluPSJjb21wb3NpdGUxIiByZXN1bHQ9ImJsdXIiIHN0ZERldmlhdGlvbj0iMC4zIi8+DQogICA8ZmVPZmZzZXQgZHg9IjEiIGR5PSIxIiByZXN1bHQ9Im9mZnNldCIvPg0KICAgPGZlQ29tcG9zaXRlIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9Im9mZnNldCIgcmVzdWx0PSJjb21wb3NpdGUyIi8+DQogIDwvZmlsdGVyPg0KIDwvZGVmcz4NCiA8bWV0YWRhdGE+DQogIDxyZGY6UkRGPg0KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPg0KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4NCiAgICA8ZGM6dGl0bGUvPg0KICAgPC9jYzpXb3JrPg0KICA8L3JkZjpSREY+DQogPC9tZXRhZGF0YT4NCiA8cGF0aCBkPSJtMjEuNjUgMTAuMjQ2LTIuOTk5NS0wLjAzMTZzLTAuOTM0NTctMi44NjA1LTMuMjQ0OC0yLjY3ODhjLTAuNzg5MjEgMS4yMjg5IDAuNjA2MjMgNC44NDg4IDAuNjA2MjMgNC44NDg4bC0xLjM4MjYgMS40ODE1cy04LjA3MzcgMTIuMzk0LTguMDczNyAxNC42ODZjLTAuMTI0MjQgMi44MTg4IDEuODkxNyA0LjIwOTYgMy44NzcxIDUuMDQ4IDAuNjU3MjEgMC4yNzc1MiAxLjMxMTEgMC40OTQ1IDEuODgyOCAwLjY4MjcxIDIuNTExMSAwLjM4OTY2IDQuMDkxOS0zLjQ3ODQgNy41NDc1LTUuNzcwNSAzLjQ0NzMtMS44ODMgNC4xMzU0LTEuOTMgNi4yMTM2LTMuNTU0LTIuMzYwNCAxMi4wMTEtOS43MzQ1IDguNTM0Ny05LjE1MzYgMTguNDkzaDI2LjQ5NGMwLjU3MDc3LTIzLjg0Ny02LjIxMzEtMzEuOTM4LTE4LjEwNC0zMy4xOTktMC4wNTE3LTEuNTMyIDAuMjQyOTctNC4xNzk1LTEuMzI4LTMuNjQ1MS0xLjU3MDkgMC41MzQ0NS0yLjMzNTEgMy42Mzk0LTIuMzM1MSAzLjYzOTR6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MjA4MS05KSIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWx0ZXI9InVybCgjZmlsdGVyODQ3KSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS4xIi8+DQogPHBhdGggZD0ibTE1Ljc2MSAxOS4xMzRzMC40NTczNi0yLjM2NzggMy4xMDY5LTIuNzc2IiBmaWxsPSIjZmZmIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4NCiA8ZWxsaXBzZSBjeD0iMTcuNzk5IiBjeT0iMTguMzU4IiByeD0iMS4xNTA2IiByeT0iMS4wNjUxIiBzdHlsZT0icGFpbnQtb3JkZXI6bWFya2VycyBmaWxsIHN0cm9rZSIvPg0KIDxwYXRoIGQ9Im0xMS4xNjMgMzMuMTM1czEuNjE1NC0wLjkzNDE1IDIuMTM3My0yLjI2MTYiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuMSIvPg0KIDxwYXRoIGQ9Im0yNS41NjUgMTMuMDM1YzIuMzU1IDAuMTUwMTMgMTUuMjUxIDAuOTE4MDYgMTQuNjkxIDI3Ljg1NyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNCIvPg0KIDxwYXRoIGQ9Im05LjEyNCAyOC44OHMtNWUtMyAtMC43NTc4NSAxLjA1NTItMS4xNzkzIiBmaWxsPSIjZmZmIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4NCjwvc3ZnPg0K')}
.is2d .bishop.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjcyMCIgeDE9IjEzMTk3IiB4Mj0iMTMzNDEiIHkxPSItOTU5MSIgeTI9Ii05NTkxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4yNjQ1OCAwIDAgLjI2NDU4IC0zNDg1LjcgMjU2Mi42KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGZpbHRlciBpZD0iZmlsdGVyMjgwOS01LTgtNS0xLTQtNy00IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPg0KICAgPGZlR2F1c3NpYW5CbHVyIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjAxIDAuMDEiLz4NCiAgPC9maWx0ZXI+DQogIDxmaWx0ZXIgaWQ9ImZpbHRlcjg0NSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4NCiAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSJyZ2IoMCwwLDApIiBmbG9vZC1vcGFjaXR5PSIuNDk4MDQiIHJlc3VsdD0iZmxvb2QiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iZmxvb2QiIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIiByZXN1bHQ9ImNvbXBvc2l0ZTEiLz4NCiAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iY29tcG9zaXRlMSIgcmVzdWx0PSJibHVyIiBzdGREZXZpYXRpb249IjAuMyIvPg0KICAgPGZlT2Zmc2V0IGR4PSIxIiBkeT0iMSIgcmVzdWx0PSJvZmZzZXQiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJvZmZzZXQiIHJlc3VsdD0iY29tcG9zaXRlMiIvPg0KICA8L2ZpbHRlcj4NCiA8L2RlZnM+DQogPG1ldGFkYXRhPg0KICA8cmRmOlJERj4NCiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4NCiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+DQogICAgPGRjOnRpdGxlLz4NCiAgIDwvY2M6V29yaz4NCiAgPC9yZGY6UkRGPg0KIDwvbWV0YWRhdGE+DQogPGcgY2xpcC1ydWxlPSJldmVub2RkIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+DQogIDxnIGZpbGwtcnVsZT0iZXZlbm9kZCI+DQogICA8cGF0aCBkPSJtMjUgNi41NWMtMC44Nzc2MiAwLTEuNjUzNiAwLjI5MDQ5LTIuMjYxNCAwLjkwMjc4LTAuNjQxMDkgMC42MTIzLTAuOTQ1NjIgMS4zMjEyLTAuOTQ1NjIgMi4xNTkxIDAgMS4yMjQ3IDAuNTczODggMi4xMjcgMS43NTU1IDIuNzM5NC0yLjk2OTIgMy4yODYxLTguNzA3NyA1LjgyMjItOC44MTA5IDEwLjgyOCAwLjAwNzkgMi42NzQ0IDEuNDY2MSA0Ljc2NDEgMy4zMDg0IDYuNzk5NmwtMS4xMTQyIDUuODMzMmMxLjY5NyAwLjU0MTYgMy4wODk4IDAuOTQxNjggNC44Mjc2IDEuMTI4MS0zLjg4MiA0LjU3NjItMTAuNzg3LTEuNzQwMi0xNS4yMDkgMi45MzI2bDIuMzMwMiAzLjU3NzFjNS41OTI4LTMuOTYyIDEzLjM3NCAzLjY3MjkgMTYuMTItMy45NjIxIDIuNzQ1OCA3LjYzNTEgMTAuNTI3IDAuMDAzNyAxNi4xMiAzLjk2MjFsMi4zMjk3LTMuNTc3MWMtNC40MjItNC42NzI5LTExLjMyNyAxLjY0MzYtMTUuMjA5LTIuOTMyNiAxLjczNzgtMC4xODY0IDMuMTMwMy0wLjU4NjUzIDQuODI3My0xLjEyODFsLTEuMTE0Mi01LjgzMzJjMS44NDIzLTIuMDM1NSAzLjMwMTItNC4xMjUyIDMuMzA4NC02Ljc5OTYtMC4xMDMxOS01LjAwNjItNS44NDE3LTcuNTQyMi04LjgxMDktMTAuODI4IDEuMTgxNi0wLjYxMjQgMS43NTU1LTEuNTE0NyAxLjc1NTUtMi43Mzk0IDAtMC44Mzc4LTAuMzA0MDEtMS41NDY4LTAuOTQ1MzYtMi4xNTkxLTAuNjA3NzUtMC42MTIzLTEuMzgzOC0wLjkwMjc4LTIuMjYxNC0wLjkwMjc4eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDI3MjApIiBmaWx0ZXI9InVybCgjZmlsdGVyODQ1KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4NCiAgIDxlbGxpcHNlIGNsYXNzPSJzdDE1IiB0cmFuc2Zvcm09Im1hdHJpeCguMzM3NTcgMCAwIC4zMjIyNyAtODkzLjMzIDEyMi4xNCkiIGN4PSIyNzIwLjMiIGN5PSItMjcxLjQiIHJ4PSIxNi4zIiByeT0iMi41IiBmaWx0ZXI9InVybCgjZmlsdGVyMjgwOS01LTgtNS0xLTQtNy00KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZS13aWR0aD0iLjgwMjE3Ii8+DQogICA8ZWxsaXBzZSBjbGFzcz0ic3QxNSIgY3g9IjI1IiBjeT0iOS42MTE1IiByeD0iMS4xNDAxIiByeT0iMS4xNDc0IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlLXdpZHRoPSIuMjY0NTgiLz4NCiAgPC9nPg0KICA8cGF0aCBkPSJtMjEuMzMzIDIzLjI2Nmg3LjMzM20tMy42NjYzLTMuMzMzOXY2Ljc1MjQiIGZpbGw9Im5vbmUiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS40Ii8+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .rook.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50Mjk5OS0wIiB4MT0iNDUwMS41IiB4Mj0iNDU5NC42IiB5MT0iLTU3Mi40IiB5Mj0iLTU3Mi40IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4zNDIwOCAwIDAgLjI4MzcgLTE1MzAuOCAxODcuMzkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlNmU2ZTYiIG9mZnNldD0iMSIvPg0KICA8L2xpbmVhckdyYWRpZW50Pg0KICA8ZmlsdGVyIGlkPSJmaWx0ZXI4NDAiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQogICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0icmdiKDAsMCwwKSIgZmxvb2Qtb3BhY2l0eT0iLjQ5ODA0IiByZXN1bHQ9ImZsb29kIi8+DQogICA8ZmVDb21wb3NpdGUgaW49ImZsb29kIiBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIgcmVzdWx0PSJjb21wb3NpdGUxIi8+DQogICA8ZmVHYXVzc2lhbkJsdXIgaW49ImNvbXBvc2l0ZTEiIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjMiLz4NCiAgIDxmZU9mZnNldCBkeD0iMSIgZHk9IjEiIHJlc3VsdD0ib2Zmc2V0Ii8+DQogICA8ZmVDb21wb3NpdGUgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0ib2Zmc2V0IiByZXN1bHQ9ImNvbXBvc2l0ZTIiLz4NCiAgPC9maWx0ZXI+DQogPC9kZWZzPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEuMDA1NSAwIDAgLjkxOTggLS4xMzY5NCAzLjUwNTEpIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiBzdHJva2Utd2lkdGg9IjEuMDM5OCI+DQogIDxnIHN0cm9rZS13aWR0aD0iMS4wMzk4Ij4NCiAgIDxwYXRoIGNsYXNzPSJzdDE0IiBkPSJtMjEuOTMyIDYuNTQ2NHYyLjkzMzZoLTQuMDkxdi0yLjU4ODNoLTUuNzk1NXY3Ljk3NTNsNC41MzI2IDMuMTQxOHYxMi41NjdsLTMuODUwOCAyLjQ4NTh2NS4yMTMzaC0zLjA2ODJ2NS4xNzg4aDMwLjY4MnYtNS4xNzg4aC0zLjA2ODJ2LTUuMjEzM2wtMy44NTA4LTIuNDg1OHYtMTIuNTMzbDQuNTMyNi0zLjIxMDh2LTcuOTQwOGgtNS43OTU1djIuNTg4M2gtNC40MzE5di0yLjkzMzZoLTIuODk3OHoiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQyOTk5LTApIiBmaWx0ZXI9InVybCgjZmlsdGVyODQwKSIgc3Ryb2tlPSIjMDEwMTAxIiBzdHJva2Utd2lkdGg9IjEuMTQzOCIvPg0KICA8L2c+DQogPC9nPg0KIDxwYXRoIGQ9Im0xOC44MjkgMzEuNDM4aDExLjk5OCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuNCIvPg0KIDxwYXRoIGQ9Im0xOC44MjkgMjAuMDA2aDExLjk5OCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuNCIvPg0KPC9zdmc+DQo=')}
.is2d .queen.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50ODYwMi0zIiB4MT0iLTcxLjYzOCIgeDI9Ii0zMC42NzkiIHkxPSItODMuMzI0IiB5Mj0iLTgzLjMyNCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTc2NDMgMCAwIC45OTI4NyA3NC45NTIgMTA3LjczKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGZpbHRlciBpZD0iZmlsdGVyMjgxMy0wLTEtNS0xLTItMS0xLTQtMS0wIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPg0KICAgPGZlR2F1c3NpYW5CbHVyIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjAxIDAuMDEiLz4NCiAgPC9maWx0ZXI+DQogIDxmaWx0ZXIgaWQ9ImZpbHRlcjgzOSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4NCiAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSJyZ2IoMCwwLDApIiBmbG9vZC1vcGFjaXR5PSIuNDk4MDQiIHJlc3VsdD0iZmxvb2QiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iZmxvb2QiIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIiByZXN1bHQ9ImNvbXBvc2l0ZTEiLz4NCiAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iY29tcG9zaXRlMSIgcmVzdWx0PSJibHVyIiBzdGREZXZpYXRpb249IjAuMyIvPg0KICAgPGZlT2Zmc2V0IGR4PSIxIiBkeT0iMSIgcmVzdWx0PSJvZmZzZXQiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJvZmZzZXQiIHJlc3VsdD0iY29tcG9zaXRlMiIvPg0KICA8L2ZpbHRlcj4NCiA8L2RlZnM+DQogPG1ldGFkYXRhPg0KICA8cmRmOlJERj4NCiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4NCiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+DQogICAgPGRjOnRpdGxlLz4NCiAgIDwvY2M6V29yaz4NCiAgPC9yZGY6UkRGPg0KIDwvbWV0YWRhdGE+DQogPHBhdGggZD0ibTI0Ljk5NCA2LjU0ODd2NS4wODdlLTRjLTEuNTY3NyAwLjAwNTg3LTIuODM1NCAxLjE4MS0yLjgzNTggMi42MjkgMC4wMDE2IDEuMTkzMyAwLjg3MjkyIDIuMjM2IDIuMTIyMyAyLjUzOTctMC42ODg5NiA0LjQ0OTUtMS45NjcgOS43MjY0LTIuNjM0OSAxNC4xMTJsLTQuMDY5MS0xMi45MjdjMC45NjcxOS0wLjQ0NDI0IDEuNTc4OS0xLjM1NTggMS41Nzk0LTIuMzUzNS04LjFlLTUgLTEuNDUyMi0xLjI3NDYtMi42Mjk1LTIuODQ2OS0yLjYyOTUtMS41NzIzIDUuODdlLTUgLTIuODQ2OCAxLjE3NzMtMi44NDY5IDIuNjI5NSAwLjAwMTkgMS4yMDUzIDAuODkwNjMgMi4yNTUxIDIuMTU2NiAyLjU0NzRsLTAuNDM4ODkgMTMuMjU4LTUuNDgzLTEwLjYxMWMwLjk1MTE2LTAuNDQ5NzkgMS41NDk1LTEuMzUzNyAxLjU0OTYtMi4zNDA3LThlLTUgLTEuNDUyMi0xLjI3NDYtMi42Mjk0LTIuODQ2OS0yLjYyOTUtMS41NzIzIDZlLTUgLTIuODQ2OCAxLjE3NzMtMi44NDY5IDIuNjI5NSA5LjA1NWUtNCAxLjMzNDYgMS4wODQxIDIuNDU3IDIuNTE5NCAyLjYxMDVsMi43NTkzIDE2LjUwNyA0LjA1MDcgNS4yNTg1LTEuMDA0NiAzLjYzNDFjLTAuMDQxOTkgMC42NTUzOSA0Ljg0ODIgMi4wMjcyIDExLjEyMiAyLjAzOTUgNi4yNzM5LTAuMDEyMjggMTEuMTY0LTEuMzg0MSAxMS4xMjItMi4wMzk1bC0xLjAwNDYtMy42MzQxIDQuMDUwNy01LjI1ODUgMi43NTk0LTE2LjUwN2MxLjQzNTMtMC4xNTM1OCAyLjUxODUtMS4yNzU5IDIuNTE5NC0yLjYxMDUtOC4xZS01IC0xLjQ1MjItMS4yNzQ2LTIuNjI5NC0yLjg0NjktMi42Mjk1LTEuNTcyMiA3LjJlLTUgLTIuODQ2OCAxLjE3NzMtMi44NDY5IDIuNjI5NSAyLjNlLTUgMC45ODcgMC41OTg0MSAxLjg5MDkgMS41NDk2IDIuMzQwN2wtNS40ODMgMTAuNjExLTAuNDM4ODktMTMuMjU4YzEuMjY2LTAuMjkyMjkgMi4xNTQ3LTEuMzQyMSAyLjE1NjYtMi41NDc0LTguMWUtNSAtMS40NTIyLTEuMjc0Ni0yLjYyOTUtMi44NDY5LTIuNjI5NS0xLjU3MjMgNS44N2UtNSAtMi44NDY4IDEuMTc3My0yLjg0NjkgMi42Mjk1IDQuNThlLTQgMC45OTc3MSAwLjYxMjE3IDEuOTA5MiAxLjU3OTQgMi4zNTM1bC00LjA2OTEgMTIuOTI3Yy0wLjY2NzkxLTQuMzg1Ni0xLjk0Ni05LjY2MjUtMi42MzQ5LTE0LjExMiAxLjI0OTQtMC4zMDM3NSAyLjEyMDctMS4zNDY0IDIuMTIyMy0yLjUzOTctMy42OGUtNCAtMS40NDgtMS4yNjgxLTIuNjIzMy0yLjgzNTgtMi42Mjl2LTUuMDg3ZS00bC0wLjAwNTUgNS4wODdlLTQgLTAuMDA1NS01LjA4N2UtNHoiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ4NjAyLTMpIiBmaWx0ZXI9InVybCgjZmlsdGVyODM5KSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS4xIiBzdHlsZT0icGFpbnQtb3JkZXI6bm9ybWFsIi8+DQogPGVsbGlwc2UgY2xhc3M9InN0MTUiIHRyYW5zZm9ybT0ibWF0cml4KC4yNzkxNCAwIDAgLjM5MDYzIC0xMjg5LjQgMTAyNC4xKSIgY3g9IjQ3MDguNyIgY3k9Ii0yNTE3LjYiIHJ4PSIzMi4xMjYiIHJ5PSIyLjg0NCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbHRlcj0idXJsKCNmaWx0ZXIyODEzLTAtMS01LTEtMi0xLTEtNC0xLTApIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iLz4NCiA8cGF0aCBkPSJtMTUuMTcyIDM0LjA3NnMyLjY5OTEtMS4yNDg3IDkuODAyMi0xLjI1NThjNy4xMDMxLTAuMDA5NSA5LjgwMDcgMS4yNTU4IDkuODAwNyAxLjI1NTgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIGZpbGwgbWFya2VycyIvPg0KPC9zdmc+DQo=')}
.is2d .king.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50Mjk4MSIgeDE9IjM0ODEuNSIgeDI9IjM1MjAuNSIgeTE9Ii0yNDQ5LjUiIHkyPSItMjQ0NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTk5OTcgMCAwIDEuMDI3MSAtMzQ3NS45IDI1MzcuOCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2U2ZTZlNiIgb2Zmc2V0PSIxIi8+DQogIDwvbGluZWFyR3JhZGllbnQ+DQogIDxmaWx0ZXIgaWQ9ImZpbHRlcjI4MTMtMC0xLTItOS0yLTMtNy0yLTMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQogICA8ZmVHYXVzc2lhbkJsdXIgcmVzdWx0PSJibHVyIiBzdGREZXZpYXRpb249IjAuMDEgMC4wMSIvPg0KICA8L2ZpbHRlcj4NCiAgPGZpbHRlciBpZD0iZmlsdGVyODM5IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPg0KICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9InJnYigwLDAsMCkiIGZsb29kLW9wYWNpdHk9Ii40OTgwNCIgcmVzdWx0PSJmbG9vZCIvPg0KICAgPGZlQ29tcG9zaXRlIGluPSJmbG9vZCIgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iIHJlc3VsdD0iY29tcG9zaXRlMSIvPg0KICAgPGZlR2F1c3NpYW5CbHVyIGluPSJjb21wb3NpdGUxIiByZXN1bHQ9ImJsdXIiIHN0ZERldmlhdGlvbj0iMC4zIi8+DQogICA8ZmVPZmZzZXQgZHg9IjEiIGR5PSIxIiByZXN1bHQ9Im9mZnNldCIvPg0KICAgPGZlQ29tcG9zaXRlIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9Im9mZnNldCIgcmVzdWx0PSJjb21wb3NpdGUyIi8+DQogIDwvZmlsdGVyPg0KIDwvZGVmcz4NCiA8bWV0YWRhdGE+DQogIDxyZGY6UkRGPg0KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPg0KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4NCiAgICA8ZGM6dGl0bGUvPg0KICAgPC9jYzpXb3JrPg0KICA8L3JkZjpSREY+DQogPC9tZXRhZGF0YT4NCiA8cGF0aCBkPSJtMjMuMzI1IDUuNTV2My4xNDcyaC0zLjI3OTN2Mi44MzgxaDMuMjc5OXYxLjcwOTNjLTMuMjgyOCAyLjA2NzgtMi45MTk4IDYuNjM4Ni0yLjkxOTggNi42Mzg2LTExLjQzMi05LjE1MzctMjEuNDEyIDUuNzc2NS03Ljc0MzkgMTIuNjg5djguNDkwN2MwIDAuOTIyNTUgNS41MjM5IDIuMzg3MSAxMi4zMzggMi4zODcyIDYuODE0IDAgMTIuMzM5LTEuNDY0NiAxMi4zMzktMi4zODcydi04LjQ5MDdjMTMuNjY4LTYuOTEyNyAzLjY4NzktMjEuODQyLTcuNzQ0LTEyLjY4OSAwIDAgMC4zNjI4OS00LjU3MDgtMi45Mi02LjYzODZ2LTEuNzA5M2gzLjI3OTR2LTIuODM4MWgtMy4yNzk0di0zLjE0NzJoLTEuNjc0MXoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDI5ODEpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbHRlcj0idXJsKCNmaWx0ZXI4MzkpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4NCiA8ZWxsaXBzZSBjbGFzcz0ic3QxNSIgdHJhbnNmb3JtPSJtYXRyaXgoLjMyMjMyIDAgMCAuNDEwNDcgMi4wOTA1IC0xMy44NTMpIiBjeD0iNzEuMDc3IiBjeT0iMTMxLjU0IiByeD0iMzIuMTI2IiByeT0iMi44NDQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWx0ZXI9InVybCgjZmlsdGVyMjgxMy0wLTEtMi05LTItMy03LTItMykiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgc3Ryb2tlLXdpZHRoPSIuNzI3MzkiLz4NCiA8cGF0aCBkPSJtMjYuOTA3IDI5LjI2NmMtMC4wNTgtNi41NzAyIDkuODI3LTEwLjY0NSAxMi45Ni02Ljk4MTcgMi42NjExIDMuMzY2OC00LjA4NTggOC4xMjIyLTQuMDg1OCA4LjEyMjJzLTUuNDYzNC0xLjAwOS0xMC43ODEtMS4wMDljLTUuMzE3MiAwLTEwLjc4MSAxLjAwOS0xMC43ODEgMS4wMDlzLTYuNzQ2OC00Ljc1NTQtNC4wODU3LTguMTIyMmMzLjEzMjgtMy42NjM1IDEzLjAxOCAwLjQxMTQ2IDEyLjk2IDYuOTgxNyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49ImJldmVsIiBzdHJva2Utd2lkdGg9IjEuNCIvPg0KPC9zdmc+DQo=')}
.is2d .pawn.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MzAwMS0wIiB4MT0iNDEyNy4yIiB4Mj0iNDIzNS43IiB5MT0iLTI1NTguMyIgeTI9Ii0yNTU4LjMiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjI2NzQ5IDAgMCAuMjY3OTkgLTEwOTMuNSA3MTMuMTEpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjM2MzYzNjIiBvZmZzZXQ9IjAiLz4NCiAgIDxzdG9wIG9mZnNldD0iMSIvPg0KICA8L2xpbmVhckdyYWRpZW50Pg0KICA8ZmlsdGVyIGlkPSJmaWx0ZXI4MzUiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQogICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0icmdiKDAsMCwwKSIgZmxvb2Qtb3BhY2l0eT0iLjQ5ODA0IiByZXN1bHQ9ImZsb29kIi8+DQogICA8ZmVDb21wb3NpdGUgaW49ImZsb29kIiBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIgcmVzdWx0PSJjb21wb3NpdGUxIi8+DQogICA8ZmVHYXVzc2lhbkJsdXIgaW49ImNvbXBvc2l0ZTEiIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjMiLz4NCiAgIDxmZU9mZnNldCBkeD0iMSIgZHk9IjEiIHJlc3VsdD0ib2Zmc2V0Ii8+DQogICA8ZmVDb21wb3NpdGUgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0ib2Zmc2V0IiByZXN1bHQ9ImNvbXBvc2l0ZTIiLz4NCiAgPC9maWx0ZXI+DQogPC9kZWZzPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxwYXRoIGNsYXNzPSJzdDMxIiBkPSJtMjUuMDE5IDQzLjQ1aC0xMy40MzljLTIuNDY1OS01LjcyMzggNC4wNzIxLTExLjAzIDguNjY3Ni0xMi44MzItNS40OTIyLTMuMDczOC0yLjUxNDgtMTAuOTExIDIuMTkyNy0xMS41NDctMS4xMjA5LTAuNzQxOTYtMS42ODEzLTIuMzI3Mi0xLjY4MTMtMy41OTkyIDAtMS4wNiAwLjQ0ODM2LTIuMDE0IDEuMjMyOS0yLjc1NTkgMC43ODQ2My0wLjc0MTk2IDEuNzkzNC0xLjE2NTkgMy4wMjYzLTEuMTY1OSAxLjEyMDggMCAyLjEyOTYgMC40MjM5NiAzLjAyNjMgMS4xNjU5IDAuNzg0NiAwLjc0MTk2IDEuMjMyOSAxLjY5NTkgMS4yMzI5IDIuNzU1OSAwIDEuMjcxOS0wLjU2MDQ1IDIuODU3My0xLjY4MTQgMy41OTkyIDUuMTU1OSAyLjAxMzkgNy4wMTI1IDkuNDI3IDIuMTkyOCAxMS41NDcgNi4yNzY3IDIuMjI1OSAxMC42ODUgNy44NTAxIDguNjY3NiAxMi44MzJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQzMDAxLTApIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbHRlcj0idXJsKCNmaWx0ZXI4MzUpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iIHN0cm9rZT0iIzAxMDEwMSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4NCjwvc3ZnPg0K')}
.is2d .knight.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTg0MSIgeDE9IjEwNjUzIiB4Mj0iMTA3OTUiIHkxPSItODA5NC43IiB5Mj0iLTgwOTQuNyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjY2NzEgMCAwIC4yNjUxNSAtMjgzNS4yIDIxNzEuMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzYzNjM2MiIG9mZnNldD0iMCIvPg0KICAgPHN0b3Agb2Zmc2V0PSIxIi8+DQogIDwvbGluZWFyR3JhZGllbnQ+DQogIDxmaWx0ZXIgaWQ9ImZpbHRlcjg0NyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4NCiAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSJyZ2IoMCwwLDApIiBmbG9vZC1vcGFjaXR5PSIuNDk4MDQiIHJlc3VsdD0iZmxvb2QiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iZmxvb2QiIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIiByZXN1bHQ9ImNvbXBvc2l0ZTEiLz4NCiAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iY29tcG9zaXRlMSIgcmVzdWx0PSJibHVyIiBzdGREZXZpYXRpb249IjAuMyIvPg0KICAgPGZlT2Zmc2V0IGR4PSIxIiBkeT0iMSIgcmVzdWx0PSJvZmZzZXQiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJvZmZzZXQiIHJlc3VsdD0iY29tcG9zaXRlMiIvPg0KICA8L2ZpbHRlcj4NCiA8L2RlZnM+DQogPG1ldGFkYXRhPg0KICA8cmRmOlJERj4NCiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4NCiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+DQogICAgPGRjOnRpdGxlLz4NCiAgIDwvY2M6V29yaz4NCiAgPC9yZGY6UkRGPg0KIDwvbWV0YWRhdGE+DQogPHBhdGggZD0ibTIxLjY1IDEwLjI0Ni0yLjk5OTQtMC4wMzE2cy0wLjkzNDU2LTIuODYwNS0zLjI0NDgtMi42Nzg4Yy0wLjc4OTIgMS4yMjg5IDAuNjA2MjMgNC44NDg4IDAuNjA2MjMgNC44NDg4bC0xLjM4MjYgMS40ODE1cy04LjA3MzcgMTIuMzk0LTguMDczNyAxNC42ODZjLTAuMTY1MzYgMy43NTE4IDMuNDYwOSA0Ljk3MzkgNS43NTk5IDUuNzMwNyAyLjUxMTEgMC4zODk2NiA0LjA5MTktMy40Nzg0IDcuNTQ3NC01Ljc3MDUgMy40NDczLTEuODgzIDQuMTM1NC0xLjkzIDYuMjEzNi0zLjU1NC0yLjM2MDQgMTIuMDExLTkuNzM0NSA4LjUzNDctOS4xNTM2IDE4LjQ5M2gyNi40OTRjMC41NzA3Ni0yMy44NDctNi4yMTMxLTMxLjkzOC0xOC4xMDQtMzMuMTk5LTAuMDUxNzA0LTEuNTMyIDAuMjQyOTctNC4xNzk1LTEuMzI4LTMuNjQ1MS0xLjU3MDkgMC41MzQ0NS0yLjMzNTEgMy42Mzk0LTIuMzM1MSAzLjYzOTR6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTg0MSkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjg0NykiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuMSIvPg0KIDxwYXRoIGQ9Im0xNS43NjEgMTkuMTMyczAuNDU3MzYtMi4zNjggMy4xMDY4LTIuNzc2MyIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTZlNmU2IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS13aWR0aD0iMS40Ii8+DQogPGVsbGlwc2UgY3g9IjE3Ljc5OSIgY3k9IjE4LjM1NiIgcng9IjEuMTUwNiIgcnk9IjEuMDY1MiIgZmlsbD0iI2U2ZTZlNiIgc3R5bGU9InBhaW50LW9yZGVyOm1hcmtlcnMgZmlsbCBzdHJva2UiLz4NCiA8cGF0aCBkPSJtMTEuMTYzIDMzLjEzNHMxLjYxNTQtMC45MzQyNCAyLjEzNzMtMi4yNjE5IiBzdHJva2U9IiNlNmU2ZTYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4NCiA8cGF0aCBkPSJtMjUuNTY1IDEzLjAzMmMyLjM1NSAwLjE1MDE0IDE1LjI1MSAwLjkxODE0IDE0LjY5MSAyNy44NiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTZlNmU2IiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNCIvPg0KIDxwYXRoIGQ9Im05LjEyNCAyOC44NzlzLTVlLTMgLTAuNzU3OTIgMS4wNTUyLTEuMTc5NCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTZlNmU2IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS13aWR0aD0iMS40Ii8+DQo8L3N2Zz4NCg==')}
.is2d .bishop.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjcyMC01IiB4MT0iMTMxOTciIHgyPSIxMzM0MSIgeTE9Ii05NTkxLjEiIHkyPSItOTU5MS4xIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4yNjQ1OCAwIDAgLjI2NDU4IC0zNDg1LjcgMjU2Mi42KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzNjM2MzYyIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGZpbHRlciBpZD0iZmlsdGVyMjgwOS01LTgtNS0xLTQtNy01IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPg0KICAgPGZlR2F1c3NpYW5CbHVyIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjAxIDAuMDEiLz4NCiAgPC9maWx0ZXI+DQogIDxmaWx0ZXIgaWQ9ImZpbHRlcjg0NSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4NCiAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSJyZ2IoMCwwLDApIiBmbG9vZC1vcGFjaXR5PSIuNDk4MDQiIHJlc3VsdD0iZmxvb2QiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iZmxvb2QiIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIiByZXN1bHQ9ImNvbXBvc2l0ZTEiLz4NCiAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iY29tcG9zaXRlMSIgcmVzdWx0PSJibHVyIiBzdGREZXZpYXRpb249IjAuMyIvPg0KICAgPGZlT2Zmc2V0IGR4PSIxIiBkeT0iMSIgcmVzdWx0PSJvZmZzZXQiLz4NCiAgIDxmZUNvbXBvc2l0ZSBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJvZmZzZXQiIHJlc3VsdD0iY29tcG9zaXRlMiIvPg0KICA8L2ZpbHRlcj4NCiA8L2RlZnM+DQogPG1ldGFkYXRhPg0KICA8cmRmOlJERj4NCiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4NCiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+DQogICAgPGRjOnRpdGxlLz4NCiAgIDwvY2M6V29yaz4NCiAgPC9yZGY6UkRGPg0KIDwvbWV0YWRhdGE+DQogPGcgY2xpcC1ydWxlPSJldmVub2RkIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+DQogIDxnIGZpbGwtcnVsZT0iZXZlbm9kZCI+DQogICA8cGF0aCBkPSJtMjUgNi41NWMtMC44Nzc2IDAtMS42NTM2IDAuMjkwNS0yLjI2MTQgMC45MDI4LTAuNjQxIDAuNjEyMy0wLjk0NTYgMS4zMjEyLTAuOTQ1NiAyLjE1OSAwIDEuMjI0OCAwLjU3MzkgMi4xMjcgMS43NTU1IDIuNzM5NC0yLjk2OTEgMy4yODYxLTguNzA3NyA1LjgyMjItOC44MTA5IDEwLjgyOCAwLjAxIDIuNjc0NCAxLjQ2NjEgNC43NjQxIDMuMzA4NCA2Ljc5OTZsLTEuMTE0MiA1LjgzMzJjMS42OTcxIDAuNTQxNiAzLjA4OTggMC45NDE3IDQuODI3NiAxLjEyODEtMy44ODE5IDQuNTc2Mi0xMC43ODctMS43NDAyLTE1LjIwOSAyLjkzMjZsMi4zMzAyIDMuNTc3MWM1LjU5MjgtMy45NjIgMTMuMzc0IDMuNjcyOSAxNi4xMi0zLjk2MjEgMi43NDU5IDcuNjM1MSAxMC41MjcgMCAxNi4xMiAzLjk2MjFsMi4zMjk3LTMuNTc3MWMtNC40MjItNC42NzI4LTExLjMyNyAxLjY0MzYtMTUuMjA5LTIuOTMyNiAxLjczNzctMC4xODY0IDMuMTMwMi0wLjU4NjUgNC44MjczLTEuMTI4MWwtMS4xMTQyLTUuODMzMmMxLjg0MjMtMi4wMzU1IDMuMzAxMi00LjEyNTIgMy4zMDg0LTYuNzk5Ni0wLjEwMzItNS4wMDYyLTUuODQxOC03LjU0MjItOC44MTA5LTEwLjgyOCAxLjE4MTYtMC42MTI0IDEuNzU1NS0xLjUxNDYgMS43NTU1LTIuNzM5NCAwLTAuODM3OC0wLjMwNC0xLjU0NjctMC45NDU0LTIuMTU5LTAuNjA3Ny0wLjYxMjMtMS4zODM3LTAuOTAyOC0yLjI2MTQtMC45MDI4eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDI3MjAtNSkiIGZpbHRlcj0idXJsKCNmaWx0ZXI4NDUpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuMSIvPg0KICAgPGVsbGlwc2UgY2xhc3M9InN0MTUiIHRyYW5zZm9ybT0ibWF0cml4KC4zMzc1NyAwIDAgLjMyMjI3IC04OTMuMzMgMTIyLjE0KSIgY3g9IjI3MjAuMyIgY3k9Ii0yNzEuNCIgcng9IjE2LjMiIHJ5PSIyLjUiIGZpbGw9IiNlNmU2ZTYiIGZpbHRlcj0idXJsKCNmaWx0ZXIyODA5LTUtOC01LTEtNC03LTUpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlLXdpZHRoPSIuODAyMTciLz4NCiAgIDxlbGxpcHNlIGNsYXNzPSJzdDE1IiBjeD0iMjUiIGN5PSI5LjYxMTciIHJ4PSIxLjE0MDEiIHJ5PSIxLjE0NzQiIGZpbGw9IiNlNmU2ZTYiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2Utd2lkdGg9Ii4yNjQ1OCIvPg0KICA8L2c+DQogIDxwYXRoIGQ9Im0yMS4zMzMgMjMuMjY2aDcuMzMzbS0zLjY2NjMtMy4zMzM5djYuNzUyNCIgZmlsbD0ibm9uZSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iI2U2ZTZlNiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4NCiA8L2c+DQo8L3N2Zz4NCg==')}
.is2d .rook.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50Mjk5OS0xIiB4MT0iNDUwMS41IiB4Mj0iNDU5NC42IiB5MT0iLTU3Mi40IiB5Mj0iLTU3Mi40IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4zNDIwOCAwIDAgLjI4MzcgLTE1MzAuOCAxODcuMzkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjM2MzYzNjIiBvZmZzZXQ9IjAiLz4NCiAgIDxzdG9wIG9mZnNldD0iMSIvPg0KICA8L2xpbmVhckdyYWRpZW50Pg0KICA8ZmlsdGVyIGlkPSJmaWx0ZXI4NDIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQogICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0icmdiKDAsMCwwKSIgZmxvb2Qtb3BhY2l0eT0iLjQ5ODA0IiByZXN1bHQ9ImZsb29kIi8+DQogICA8ZmVDb21wb3NpdGUgaW49ImZsb29kIiBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIgcmVzdWx0PSJjb21wb3NpdGUxIi8+DQogICA8ZmVHYXVzc2lhbkJsdXIgaW49ImNvbXBvc2l0ZTEiIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjMiLz4NCiAgIDxmZU9mZnNldCBkeD0iMSIgZHk9IjEiIHJlc3VsdD0ib2Zmc2V0Ii8+DQogICA8ZmVDb21wb3NpdGUgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0ib2Zmc2V0IiByZXN1bHQ9ImNvbXBvc2l0ZTIiLz4NCiAgPC9maWx0ZXI+DQogPC9kZWZzPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICAgPGNjOmxpY2Vuc2UgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy1uZC80LjAvIi8+DQogICA8L2NjOldvcms+DQogICA8Y2M6TGljZW5zZSByZGY6YWJvdXQ9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLW5kLzQuMC8iPg0KICAgIDxjYzpwZXJtaXRzIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjUmVwcm9kdWN0aW9uIi8+DQogICAgPGNjOnBlcm1pdHMgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNEaXN0cmlidXRpb24iLz4NCiAgICA8Y2M6cmVxdWlyZXMgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNOb3RpY2UiLz4NCiAgICA8Y2M6cmVxdWlyZXMgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNBdHRyaWJ1dGlvbiIvPg0KICAgIDxjYzpwcm9oaWJpdHMgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNDb21tZXJjaWFsVXNlIi8+DQogICA8L2NjOkxpY2Vuc2U+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMDA3LjkgMjEzNi42KSI+DQogIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEuMDA1NSAwIDAgLjkxOTggMzAwNy43IC0yMTMzLjEpIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiBzdHJva2Utd2lkdGg9IjEuMDM5OCI+DQogICA8ZyBzdHJva2Utd2lkdGg9IjEuMDM5OCI+DQogICAgPHBhdGggY2xhc3M9InN0MTQiIGQ9Im0yMS45MzIgNi41NDY0djIuOTMzNmgtNC4wOTF2LTIuNTg4M2gtNS43OTU1djcuOTc1M2w0LjUzMjYgMy4xNDE4djEyLjU2N2wtMy44NTA4IDIuNDg1OHY1LjIxMzNoLTMuMDY4MnY1LjE3ODhoMzAuNjgydi01LjE3ODhoLTMuMDY4MnYtNS4yMTMzbC0zLjg1MDgtMi40ODU4di0xMi41MzNsNC41MzI2LTMuMjEwOHYtNy45NDA4aC01Ljc5NTV2Mi41ODgzaC00LjQzMTl2LTIuOTMzNmgtMi44OTc4eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDI5OTktMSkiIGZpbHRlcj0idXJsKCNmaWx0ZXI4NDIpIiBzdHJva2U9IiMwMTAxMDEiIHN0cm9rZS13aWR0aD0iMS4xNDM4Ii8+DQogICA8L2c+DQogIDwvZz4NCiAgPHBhdGggZD0ibTMwMjYuNy0yMTA1LjJoMTEuOTk4IiBmaWxsPSJub25lIiBzdHJva2U9IiNlNmU2ZTYiIHN0cm9rZS13aWR0aD0iMS40Ii8+DQogIDxwYXRoIGQ9Im0zMDI2LjctMjExNi42aDExLjk5OCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTZlNmU2IiBzdHJva2Utd2lkdGg9IjEuNCIvPg0KIDwvZz4NCjwvc3ZnPg0K')}
.is2d .queen.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50ODY4NC00IiB4MT0iLTcxLjYzNyIgeDI9Ii0zMC42NzgiIHkxPSItODMuMzI1IiB5Mj0iLTgzLjMyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTc2NDQgMCAwIC45OTI4NiA3NC45NTIgMTA3LjczKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzNjM2MzYyIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGZpbHRlciBpZD0iZmlsdGVyMjgxMy0wLTEtNS0xLTItMS0xLTQtMS0wLTMtNiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4NCiAgIDxmZUdhdXNzaWFuQmx1ciByZXN1bHQ9ImJsdXIiIHN0ZERldmlhdGlvbj0iMC4wMSAwLjAxIi8+DQogIDwvZmlsdGVyPg0KICA8ZmlsdGVyIGlkPSJmaWx0ZXI4MzkiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQogICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0icmdiKDAsMCwwKSIgZmxvb2Qtb3BhY2l0eT0iLjQ5ODA0IiByZXN1bHQ9ImZsb29kIi8+DQogICA8ZmVDb21wb3NpdGUgaW49ImZsb29kIiBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIgcmVzdWx0PSJjb21wb3NpdGUxIi8+DQogICA8ZmVHYXVzc2lhbkJsdXIgaW49ImNvbXBvc2l0ZTEiIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjMiLz4NCiAgIDxmZU9mZnNldCBkeD0iMSIgZHk9IjEiIHJlc3VsdD0ib2Zmc2V0Ii8+DQogICA8ZmVDb21wb3NpdGUgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0ib2Zmc2V0IiByZXN1bHQ9ImNvbXBvc2l0ZTIiLz4NCiAgPC9maWx0ZXI+DQogPC9kZWZzPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxwYXRoIGQ9Im0yNC45OTQgNi41NDg4djUuMDg2ZS00Yy0xLjU2NzcgMC4wMDU4Ny0yLjgzNTQgMS4xODEtMi44MzU4IDIuNjI5IDAuMDAxNiAxLjE5MzMgMC44NzI5MiAyLjIzNiAyLjEyMjMgMi41Mzk3LTAuNjg4OTYgNC40NDk1LTEuOTY3IDkuNzI2NC0yLjYzNDkgMTQuMTEybC00LjA2OTEtMTIuOTI3YzAuOTY3MTktMC40NDQyNCAxLjU3ODktMS4zNTU4IDEuNTc5NC0yLjM1MzUtOC4xZS01IC0xLjQ1MjItMS4yNzQ2LTIuNjI5NC0yLjg0NjktMi42Mjk1LTEuNTcyMyA1Ljg3ZS01IC0yLjg0NjggMS4xNzczLTIuODQ2OSAyLjYyOTUgMC4wMDE5IDEuMjA1MyAwLjg5MDYzIDIuMjU1MSAyLjE1NjYgMi41NDc0bC0wLjQzODg5IDEzLjI1OC01LjQ4My0xMC42MTFjMC45NTExNy0wLjQ0OTc5IDEuNTQ5Ni0xLjM1MzcgMS41NDk2LTIuMzQwNy04ZS01IC0xLjQ1MjItMS4yNzQ2LTIuNjI5NC0yLjg0NjktMi42Mjk1LTEuNTcyMyA1LjllLTUgLTIuODQ2OCAxLjE3NzMtMi44NDY5IDIuNjI5NSA5LjA1NGUtNCAxLjMzNDYgMS4wODQxIDIuNDU3IDIuNTE5NCAyLjYxMDVsMi43NTk0IDE2LjUwNyA0LjA1MDcgNS4yNTg1LTEuMDA0NiAzLjYzNDFjLTAuMDQxOTkgMC42NTUzOSA0Ljg0ODIgMi4wMjcyIDExLjEyMiAyLjAzOTUgNi4yNzM5LTAuMDEyMjggMTEuMTY0LTEuMzg0MSAxMS4xMjItMi4wMzk1bC0xLjAwNDYtMy42MzQxIDQuMDUwNy01LjI1ODUgMi43NTk0LTE2LjUwN2MxLjQzNTMtMC4xNTM1OCAyLjUxODUtMS4yNzU5IDIuNTE5NC0yLjYxMDUtOGUtNSAtMS40NTIyLTEuMjc0Ni0yLjYyOTQtMi44NDY5LTIuNjI5NS0xLjU3MjIgNy4yZS01IC0yLjg0NjggMS4xNzczLTIuODQ2OSAyLjYyOTUgMi4yZS01IDAuOTg2OTkgMC41OTg0MSAxLjg5MDkgMS41NDk2IDIuMzQwN2wtNS40ODMgMTAuNjExLTAuNDM4ODktMTMuMjU4YzEuMjY2LTAuMjkyMjkgMi4xNTQ3LTEuMzQyMSAyLjE1NjYtMi41NDc0LTguMWUtNSAtMS40NTIyLTEuMjc0Ni0yLjYyOTQtMi44NDY5LTIuNjI5NS0xLjU3MjMgNS44N2UtNSAtMi44NDY4IDEuMTc3My0yLjg0NjkgMi42Mjk1IDQuNThlLTQgMC45OTc3MSAwLjYxMjE3IDEuOTA5MiAxLjU3OTQgMi4zNTM1bC00LjA2OTEgMTIuOTI3Yy0wLjY2NzkxLTQuMzg1Ni0xLjk0Ni05LjY2MjQtMi42MzQ5LTE0LjExMiAxLjI0OTQtMC4zMDM3NSAyLjEyMDctMS4zNDY0IDIuMTIyMy0yLjUzOTctMy42OGUtNCAtMS40NDgtMS4yNjgxLTIuNjIzMy0yLjgzNTgtMi42Mjl2LTUuMDg2ZS00bC0wLjAwNTUgNS4wODZlLTQgLTAuMDA1NS01LjA4NmUtNHoiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ4Njg0LTQpIiBmaWx0ZXI9InVybCgjZmlsdGVyODM5KSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS4xIiBzdHlsZT0icGFpbnQtb3JkZXI6bm9ybWFsIi8+DQogPGVsbGlwc2UgY2xhc3M9InN0MTUiIHRyYW5zZm9ybT0ibWF0cml4KC4yNzkxNCAwIDAgLjM5MDYzIC0xMjg5LjQgMTAyNCkiIGN4PSI0NzA4LjciIGN5PSItMjUxNy42IiByeD0iMzIuMTI2IiByeT0iMi44NDQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbD0iI2U2ZTZlNiIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWx0ZXI9InVybCgjZmlsdGVyMjgxMy0wLTEtNS0xLTItMS0xLTQtMS0wLTMtNikiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIvPg0KIDxwYXRoIGQ9Im0xNS4xNzIgMzQuMDc2czIuNjk5MS0xLjI0ODcgOS44MDIyLTEuMjU1OGM3LjEwMzEtMC4wMDk1IDkuODAwOCAxLjI1NTggOS44MDA4IDEuMjU1OCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTZlNmU2IiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgZmlsbCBtYXJrZXJzIi8+DQo8L3N2Zz4NCg==')}
.is2d .king.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxkZWZzPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50Mjk4MS0zIiB4MT0iMzQ4MS41IiB4Mj0iMzUyMC41IiB5MT0iLTI0NDciIHkyPSItMjQ0NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTk5OTcgMCAwIDEuMDI3MSAtMzQ3NS45IDI1MzcuOCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzYzNjM2MiIG9mZnNldD0iMCIvPg0KICAgPHN0b3Agb2Zmc2V0PSIxIi8+DQogIDwvbGluZWFyR3JhZGllbnQ+DQogIDxmaWx0ZXIgaWQ9ImZpbHRlcjI4MTMtMC0xLTItOS0yLTMtNy0yLTctNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4NCiAgIDxmZUdhdXNzaWFuQmx1ciByZXN1bHQ9ImJsdXIiIHN0ZERldmlhdGlvbj0iMC4wMSAwLjAxIi8+DQogIDwvZmlsdGVyPg0KICA8ZmlsdGVyIGlkPSJmaWx0ZXI4MzkiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQogICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0icmdiKDAsMCwwKSIgZmxvb2Qtb3BhY2l0eT0iLjQ5ODA0IiByZXN1bHQ9ImZsb29kIi8+DQogICA8ZmVDb21wb3NpdGUgaW49ImZsb29kIiBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIgcmVzdWx0PSJjb21wb3NpdGUxIi8+DQogICA8ZmVHYXVzc2lhbkJsdXIgaW49ImNvbXBvc2l0ZTEiIHJlc3VsdD0iYmx1ciIgc3RkRGV2aWF0aW9uPSIwLjMiLz4NCiAgIDxmZU9mZnNldCBkeD0iMSIgZHk9IjEiIHJlc3VsdD0ib2Zmc2V0Ii8+DQogICA8ZmVDb21wb3NpdGUgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0ib2Zmc2V0IiByZXN1bHQ9ImNvbXBvc2l0ZTIiLz4NCiAgPC9maWx0ZXI+DQogPC9kZWZzPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxwYXRoIGQ9Im0yMy4zMjQgNS41NDk3djMuMTQ3MmgtMy4yNzkzdjIuODM4MWgzLjI3OTl2MS43MDkzYy0zLjI4MjggMi4wNjc4LTIuOTE5OCA2LjYzODYtMi45MTk4IDYuNjM4Ni0xMS40MzItOS4xNTM3LTIxLjQxMiA1Ljc3NjUtNy43NDM5IDEyLjY4OXY4LjQ5MDdjMCAwLjkyMjU1IDUuNTIzOSAyLjM4NzEgMTIuMzM4IDIuMzg3MiA2LjgxNCAwIDEyLjMzOS0xLjQ2NDYgMTIuMzM5LTIuMzg3MnYtOC40OTA3YzEzLjY2OC02LjkxMjcgMy42ODc5LTIxLjg0Mi03Ljc0NC0xMi42ODkgMCAwIDAuMzYyODktNC41NzA4LTIuOTItNi42Mzg2di0xLjcwOTNoMy4yNzk0di0yLjgzODFoLTMuMjc5NHYtMy4xNDcyaC0xLjY3NDF6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQyOTgxLTMpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbHRlcj0idXJsKCNmaWx0ZXI4MzkpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4NCiA8ZWxsaXBzZSBjbGFzcz0ic3QxNSIgdHJhbnNmb3JtPSJtYXRyaXgoLjMyMjMyIDAgMCAuNDEwNDcgMi4wODk3IC0xMy44NTMpIiBjeD0iNzEuMDc3IiBjeT0iMTMxLjU0IiByeD0iMzIuMTI2IiByeT0iMi44NDQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbD0iI2U2ZTZlNiIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWx0ZXI9InVybCgjZmlsdGVyMjgxMy0wLTEtMi05LTItMy03LTItNy01KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiBzdHJva2Utd2lkdGg9Ii43MjczOSIvPg0KIDxwYXRoIGQ9Im0yNi45MDYgMjkuMjY2Yy0wLjA1OC02LjU3MDIgOS44MjctMTAuNjQ1IDEyLjk2LTYuOTgxNyAyLjY2MTEgMy4zNjY4LTQuMDg1OCA4LjEyMjItNC4wODU4IDguMTIyMnMtNS40NjM0LTEuMDA5LTEwLjc4MS0xLjAwOWMtNS4zMTcyIDAtMTAuNzgxIDEuMDA5LTEwLjc4MSAxLjAwOXMtNi43NDY4LTQuNzU1NC00LjA4NTctOC4xMjIyYzMuMTMyOC0zLjY2MzUgMTMuMDE4IDAuNDExNDYgMTIuOTYgNi45ODE3IiBmaWxsPSJub25lIiBzdHJva2U9IiNlNmU2ZTYiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWwiIHN0cm9rZS13aWR0aD0iMS40Ii8+DQo8L3N2Zz4NCg==')}

View File

@ -1,12 +1,12 @@
.is2d .pawn.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY2LjEyIC0xNzMuMTIpIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPg0KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjEwMTggMCAwIDEuMDk5NyAtMTMyLjU1IDU1LjUzMikiIHN0cm9rZS13aWR0aD0iLjk5OTMyIj4NCiAgIDxwYXRoIHRyYW5zZm9ybT0ic2NhbGUoLjI2NDU4KSIgZD0ibTMxMy42NSA0NDIuMjVjLTEyLjYzMiAzLjhlLTQgLTIyLjg3MyA4LjkzMjUtMjIuODczIDE5Ljk1MyAwIDUuNzMxMyAyLjgzNTYgMTEuMTg1IDcuNzY5NSAxNC45NjloLTUuOTEwMmMtNC42NTU2IDAtOC41MDk4IDMuMjg5LTguNTA5OCA3LjI1Nzh2MS40NzI3YzAgMy45Njg2IDMuODU0MiA3LjI1NzggOC41MDk4IDcuMjU3OGg4LjQyOTdjLTAuNDExNTggMjAuMzY4LTIzLjUwMSAyNS42MDctMjMuNTAxIDQxLjg5NmwzNi4wODMtMC4wMjczaDJlLTNsMzYuMDgzIDAuMDI3M2MwLTE2LjI4OS0yMy4wODktMjEuNTI5LTIzLjUwMS00MS44OTZoOC40MzE2YzQuNjU1NiAwIDguNTA5OC0zLjI4OTIgOC41MDk4LTcuMjU3OHYtMS40NzI3YzAtMy45Njg4LTMuODU0Mi03LjI1NzgtOC41MDk4LTcuMjU3OGgtNS45MTAyYzQuOTMzOS0zLjc4NDIgNy43Njk1LTkuMjM3NCA3Ljc2OTUtMTQuOTY5IDAtMTEuMDIxLTEwLjI0MS0xOS45NTMtMjIuODczLTE5Ljk1M3oiIGZpbGw9IiNmMmU3ZGEiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMzMjMyMzIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iNi44NjcyIi8+DQogICA8cGF0aCBkPSJtODIuOTg3IDExNy4wMWMtMC40ODkyNiAzZS01IC0wLjk2NDY3IDAuMDUxOS0xLjQyMDUgMC4xNDc2MiA1Ljg3MzUgMC42MTYxMyA3LjIwNCA1Ljc1NSA0LjYxNTYgOC4yMDg2LTEuODkxOCAxLjUwNDYtNy4xOTEyIDAuODgzODUtNy4xOTEyIDAuODgzODUgMi40MDMgMC4zOTM2MyA0LjY2NDIgMS43Mzg3IDYuODA2IDIuMjEzOC00LjAzOTggNi4zMjM1IDIuOTY4MiA2Ljg4NTUgMi45NjgyIDEzLjA5OGwzLjc2OTIgM2UtM2MwLjMyNzU5LTQuNDE0OC01Ljk3NTQtNS42OTYyLTYuMjE3OS0xMS4wODVoMi4yMzA2YzEuMjMyIDAgMi4yNTE0LTAuODY5OTMgMi4yNTE0LTEuOTE5OXYtMC4zODk2MmMwLTEuMDUtMS4wMTk0LTEuOTIwNC0yLjI1MTQtMS45MjA0aC0xLjU2MzhjMS4zMDU1LTEuMDAxMiAyLjA1NjEtMi40NDM5IDIuMDU1OC0zLjk2MDIgMC0yLjkxNTgtMi43MDk2LTUuMjc5NC02LjA1MTctNS4yNzk0eiIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIG9wYWNpdHk9Ii4zIi8+DQogIDwvZz4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xNTA5IDAgMCAxLjE0OTkgMTQ4LjEyIDM0LjAwMSkiIHN0cm9rZS13aWR0aD0iLjk1NjIxIj4NCiAgIDxwYXRoIGQ9Im0tMTc0LjY1IDE1NC4xMWMtMS4yNDg0IDAtMi4yODI2IDEuMDU3OS0yLjI4MjYgMi4zMzQ3djAuNDczODdsMC4wMTA5IDIuMzM0N2gyNC45OGwwLjAxMDktMi4zMzQ3di0wLjQ3Mzg3YzAtMS4yNzY4LTEuMDM0Mi0yLjMzNDctMi4yODI2LTIuMzM0N2gtMTAuMjE4eiIgZmlsbD0iI2YyZTdkYSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzMyMzIzMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNzM4NiIvPg0KICAgPHBhdGggZD0ibS0xNTguNDQgMTU0LjExYzEuMjQ4NCAwIDIuMjgyNiAxLjA1NzkgMi4yODI2IDIuMzM0N3YwLjQ3Mzg3bC0wLjAxMDkgMi4zMzQ3aDQuMjMzM2wwLjAxMDktMi4zMzQ3di0wLjQ3Mzg3YzAtMS4yNzY4LTEuMDM0Mi0yLjMzNDctMi4yODI2LTIuMzM0N3oiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBvcGFjaXR5PSIuMyIvPg0KICA8L2c+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .knight.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwNS44MSAtMTcyLjk0KSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4wNjIxIDAgMCAxLjA1ODkgLTEwNi4zOCAxNzUuMjMpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlLXdpZHRoPSIxLjAzNzIiPg0KICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMyODMuMSw0MzEuNzIpIiBzdHJva2Utd2lkdGg9IjEuMDM3MiI+DQogICAgPHBhdGggY2xhc3M9InN0MjgiIGQ9Im0zMzA4LjEtNDExLjgzLTEwLjkxNCAxLjAzNjItMS4zNjg5LTQuOTI1OCAxMy42MjItNi40MzU3IDEuNjU5Ni0zLjY4NDQgOS42MDQ4IDExLjIzMWMwIDdlLTUgLTMuODc1NyAxNi42OTUtMy44NzU3IDE2LjY5NWwtMTkuMzE3LTNlLTVjMC4yMzAxLTEwLjY2NCA5LjA3NTItNy42NDk2IDEwLjU4OS0xMy45MTZ6IiBmaWxsPSIjZjJlN2RhIiBzdHJva2U9IiMzMjMyMzIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS44ODU5Ii8+DQogICAgPHBhdGggZD0ibTMzMTEuMS00MjUuODMtMC44Mjc0IDEuODM2IDAuNDAxMS0wLjg5MDI3YzIuNTM0NyAzLjUxNTQgNS4yNzk4IDYuODczOCA3Ljk1NTUgMTAuMjgybC00Ljk3NiAxNi42ODhoMy4xNzU1czMuODc0OC0xNi42ODQgMy44NzU5LTE2LjY4OHoiIG9wYWNpdHk9Ii4zIi8+DQogICA8L2c+DQogIDwvZz4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xNTA5IDAgMCAxLjE0OTkgMTA4LjQzIDMzLjgyMSkiIHN0cm9rZS13aWR0aD0iLjk1NjIxIj4NCiAgIDxwYXRoIGQ9Im0tMTc0LjY1IDE1NC4xMWMtMS4yNDg0IDAtMi4yODI2IDEuMDU3OS0yLjI4MjYgMi4zMzQ3djAuNDczODdsMC4wMTA5IDIuMzM0N2gyNC45OGwwLjAxMDktMi4zMzQ3di0wLjQ3Mzg3YzAtMS4yNzY4LTEuMDM0Mi0yLjMzNDctMi4yODI2LTIuMzM0N2gtMTAuMjE4eiIgZmlsbD0iI2YyZTdkYSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzMyMzIzMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNzM4NiIvPg0KICAgPHBhdGggZD0ibS0xNTguNDQgMTU0LjExYzEuMjQ4NCAwIDIuMjgyNiAxLjA1NzkgMi4yODI2IDIuMzM0N3YwLjQ3Mzg3bC0wLjAxMDkgMi4zMzQ3aDQuMjMzM2wwLjAxMDktMi4zMzQ3di0wLjQ3Mzg3YzAtMS4yNzY4LTEuMDM0Mi0yLjMzNDctMi4yODI2LTIuMzM0N3oiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBvcGFjaXR5PSIuMyIvPg0KICA8L2c+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .bishop.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE0NS42NiAtMTE2LjAzKSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMTkgMCAwIDEuMDc1MSAtMTQ1Ljk0IDExNy43OCkiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2Utd2lkdGg9IjEuMDUxIj4NCiAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMzI4LjYsNDMxLjcyKSIgc3Ryb2tlLXdpZHRoPSIxLjA1MSI+DQogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLS4xNjAwNSA1Ny4wNzkpIj4NCiAgICAgPHBhdGggZD0ibTMzNTUuNC00ODIuOTZjLTEuNDc5OC0xLjI2NjktOS4zODI2LTEuMDQ0My00LjU4MTUgNS40NTAyLTkuNzEyNiA5Ljg1OTgtMTEuMDQzIDE1LjI3OC02LjA3ODggMjIuNTEzaDE3LjY1NGM1Ljk3MTQtNi40Mjk2IDIuNTExNS0xMy41MDEtNC43MzIyLTIwLjc0Mi0yLjgyOTIgMy44MzEyLTIuNjkzNiA2LjgzNzEtMy4zNTM0IDEwLjM1M2wtNC41OTE2LTAuMDY2MWMtMC42NDY1LTUuNTg2MSA3Ljk5OTQtMTQuMDgyIDUuNjgzMi0xNy41MDh6IiBmaWxsPSIjZjJlN2RhIiBzdHJva2U9IiMzMjMyMzIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS45MTA4Ii8+DQogICAgIDxwYXRoIGQ9Im0zMzUzLjUtNDgzLjQ5Yy0wLjYxMzUgMC4wMTktMC4yMDMyIDAuMTgzMDctMC43NTcgMC41MjgxNCAwIDJlLTMgMC4wMSA1ZS0zIDAuMDEgN2UtMyAzLjUxNDktMC4yODkzLTIuMzI0MiAxMC45NS0zLjMzMDYgMTcuNTc0IDAuNTI2LTIuODAzNCAxLjI5OTktNS4yODM3IDMuMDI0Ny04LjExNTMgMS45NjU5LTQuMDQ3NyA0LjE1NzQtOC4wNzUgMi45NTE3LTkuNDU4OC0wLjQwMzctMC4zNTQyMi0xLjEyMzEtMC41NTkzLTEuODk4MS0wLjUzNTM2em00LjE2MDEgNy43NTYxYy0wLjU4ODIgMC43OTYzNS0wLjUwNjEgMC42MjI5Ni0wLjk1MjggMS4zNiA1Ljg5MjEgNS42MjU5IDguNTY1MSAxMi44MjQgMy4wMzg3IDE5LjM4MmgyLjY0NjRjNS45NzE0LTYuNDI5NiAyLjUxMTItMTMuNTAxLTQuNzMyMy0yMC43NDJ6IiBvcGFjaXR5PSIuMyIvPg0KICAgIDwvZz4NCiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0NS4zMjYsNTcuMDc5KSI+PC9nPg0KICAgPC9nPg0KICA8L2c+DQogIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEuMTUwOSAwIDAgMS4xNDk5IDY4LjU4MSAtMjMuMDkxKSIgc3Ryb2tlLXdpZHRoPSIuOTU2MjEiPg0KICAgPHBhdGggZD0ibS0xNzQuNjUgMTU0LjExYy0xLjI0ODQgMC0yLjI4MjYgMS4wNTc5LTIuMjgyNiAyLjMzNDd2MC40NzM4N2wwLjAxMDkgMi4zMzQ3aDI0Ljk4bDAuMDEwOS0yLjMzNDd2LTAuNDczODdjMC0xLjI3NjgtMS4wMzQyLTIuMzM0Ny0yLjI4MjYtMi4zMzQ3aC0xMC4yMTh6IiBmaWxsPSIjZjJlN2RhIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlPSIjMzIzMjMyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS43Mzg2Ii8+DQogICA8cGF0aCBkPSJtLTE1OC40NCAxNTQuMTFjMS4yNDg0IDAgMi4yODI2IDEuMDU3OSAyLjI4MjYgMi4zMzQ3djAuNDczODdsLTAuMDEwOSAyLjMzNDdoNC4yMzMzbDAuMDEwOS0yLjMzNDd2LTAuNDczODdjMC0xLjI3NjgtMS4wMzQyLTIuMzM0Ny0yLjI4MjYtMi4zMzQ3eiIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIG9wYWNpdHk9Ii4zIi8+DQogIDwvZz4NCiA8L2c+DQo8L3N2Zz4NCg==')}
.is2d .rook.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2Mi41MyAtMTE2LjU3KSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjg5MDI1IDAgMCAxLjA0NCAtMzI2Ny4zIDU2OC4yNykiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2Utd2lkdGg9IjEuMTQxIj4NCiAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC45NjU4MSAzLjAxNDkgNDAuNzI4KSIgc3Ryb2tlLXdpZHRoPSIxLjE2MSI+DQogICAgPHBhdGggdHJhbnNmb3JtPSJzY2FsZSguMjY0NTgpIiBkPSJtMTI4MDAtMTgxOS40djMwLjEwN2MwIDEyLjgzNiAyNy43MjcgMTQuODI2IDI3LjcyNyAxNC44MjYtMS41IDM4Ljc1MS0yMS4zODUgNjQuNzY2LTIxLjM4NSA2NC43NjZsOTAuOTcxLTAuMTU0M3MtMTkuNzQ1LTI2LjAwNC0yMS4yMy02NC42MTFjMCAwIDI5LjI4LTEuOTkwNSAyOS4yOC0xNC44MjZ2LTMwLjEwN2gtMjAuMDM3czEuOTQ2IDguODQ0LTEuOTk1IDEyLjgwOWMtNC4zOTYgNC40MjI4LTEwLjI2OSA0LjQyMjgtMTQuNjY2IDAtMy45NC0zLjk2NDYtMS45OTItMTIuODA5LTEuOTkyLTEyLjgwOWgtMjcuOTgyczEuOTQ4IDguODQ0LTEuOTkyIDEyLjgwOWMtNC43NjQgNC43OTE3LTExLjQ2IDQuNzkxNy0xNi4yMjMgMC0zLjk0MS0zLjk2NDYtMS45OTItMTIuODA5LTEuOTkyLTEyLjgwOXoiIGZpbGw9IiNmMmU3ZGEiIHN0cm9rZT0iIzMyMzIzMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSI3Ljk3ODQiLz4NCiAgICA8cGF0aCB0cmFuc2Zvcm09InNjYWxlKC4yNjQ1OCkiIGQ9Im0xMjg5Mi0xODE5LjQgMC4wNiAyOS43OThjLTAuMzg0IDQuMDUxNy0xMC40MTggOS4xOTgyLTE2Ljk3NyA5LjUwMDJsLTY2LjAwNCAwLjA1N2MtMS4wMTMgMC45NTAyIDEwLjU5NSA0LjgzMTggMTUuNjY5IDUuNTc3MmwzNy4zODMgNC45MDY2Yy0yLjIzNCAyNC45MSAyMi4xMDkgNTkuNzggMjIuMDg2IDU5LjcwM2gxMi42MDhzLTE5Ljc0NS0yNi4wMDMtMjEuMjMtNjQuNjExYzEwLjgxNC0xLjU1MTcgMTIuNTQyLTMuMTg3NiAxNy4xNC00LjE1MzdoMC4wOGwtMC4wMS0wLjAxNGM0LjM0My0wLjkyODUgMTEuOTI1LTUuNDA2MiAxMi4wNjUtMTAuNjU4di0zMC4xMDd6IiBvcGFjaXR5PSIuMyIvPg0KICAgPC9nPg0KICA8L2c+DQogIDxwYXRoIGQ9Im0tMjQ5LjI5IDE1NC42NmMtMS40MzY4IDAtMi42MjcgMS4yMTY0LTIuNjI3IDIuNjg0NnYwLjU0NDg4bDAuMDEyNiAyLjY4NDZoMjguNzVsMC4wMTI1LTIuNjg0NnYtMC41NDQ4OGMwLTEuNDY4Mi0xLjE5MDItMi42ODQ2LTIuNjI3LTIuNjg0NmgtMTEuNzZ6IiBmaWxsPSIjZjJlN2RhIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlPSIjMzIzMjMyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIvPg0KICA8cGF0aCBkPSJtLTIzMC42NCAxNTQuNjZjMS40MzY4IDAgMi42MjcgMS4yMTY0IDIuNjI3IDIuNjg0NnYwLjU0NDg4bC0wLjAxMjUgMi42ODQ2aDQuODcyMWwwLjAxMjUtMi42ODQ2di0wLjU0NDg4YzAtMS40NjgyLTEuMTkwMi0yLjY4NDYtMi42MjctMi42ODQ2eiIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIG9wYWNpdHk9Ii4zIi8+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .queen.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4Ny4yOCAtMTcyLjEzKSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xODc1IDAgMCAxLjE4NzUgMjEuOTkzIDYyLjY2NSkiIHN0cm9rZS13aWR0aD0iLjkyNjMiPg0KICAgPHBhdGggdHJhbnNmb3JtPSJzY2FsZSguMjY0NTgpIiBkPSJtLTU4Ni40OCAzNjcuMjdjLTguMzg3NSA3ZS00IC0xNS4xODYgNi42NzcxLTE1LjE4NiAxNC45MTIgNWUtMyA1LjkwNDEgMy41NTgxIDExLjI0OSA5LjA2MDYgMTMuNjMxLTEuMTc1IDcuMjc3OS00LjgwNiAyNC4wNTctMTQuODk2IDI1LjQ5MS03LjQ5NTQgMS4wNjQ5LTEyLjI2OS00LjA5NjQtMTUuNTMxLTEwLjAwNiAzLjUyNjgtMi41MTkgNS42MTYxLTYuNTQwMyA1LjYyMy0xMC44MjIgNC4zZS00IC03LjQwNjMtNi4xMTQ4LTEzLjQxLTEzLjY1OC0xMy40MS03LjU0MzQtMi43ZS00IC0xMy42NTkgNi4wMDM5LTEzLjY1OCAxMy40MSA0ZS0zIDYuODE5NyA1LjIyMSAxMi41NSAxMi4xMjMgMTMuMzE2bDE1LjgyOCA1NS44MjZoNjAuNTg4bDE1LjgzLTU1LjgyNmM2LjkwMTItMC43NjcyIDEyLjExNy02LjQ5NzQgMTIuMTIxLTEzLjMxNiA0LjNlLTQgLTcuNDA2My02LjExNDgtMTMuNDEtMTMuNjU4LTEzLjQxLTcuNTQyNyA3LjllLTQgLTEzLjY1NyA2LjAwNDYtMTMuNjU2IDEzLjQxIDZlLTMgNC4yODE2IDIuMDk1MSA4LjMwMjggNS42MjExIDEwLjgyMi0zLjI2MjMgNS45MS04LjAzNTggMTEuMDcxLTE1LjUzMSAxMC4wMDYtMTAuMDktMS40MzM5LTEzLjcyMS0xOC4yMTMtMTQuODk2LTI1LjQ5MSA1LjUwMjUtMi4zODE3IDkuMDU1NC03LjcyNjcgOS4wNjA2LTEzLjYzMSA3LjhlLTQgLTguMjM0My02Ljc5NjgtMTQuOTEtMTUuMTg0LTE0LjkxMnoiIGZpbGw9IiNmMmU3ZGEiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMzMjMyMzIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iNi4zNjU0Ii8+DQogICA8cGF0aCBkPSJtLTE0My4zOCAxMDIuNDFjLTAuNDUxNzUgMWUtMyAtMC44OTkyNSAwLjA4NTgtMS4zMTkzIDAuMjQ5MDggMy45OTIzIDEuNDEzNSAzLjI2NDIgNS43MzA2IDAuNDk3NjIgNi4xNjA5bC01LjUxOTUgMTUuNDMyaDIuNjQ1OGw0LjEwMjEtMTQuNzcxYzEuODI2LTAuMjAyOTkgMy4yMDYtMS43MTkxIDMuMjA3LTMuNTIzMyAxLjFlLTQgLTEuOTU5Ni0xLjYxNzktMy41NDgyLTMuNjEzNy0zLjU0ODF6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjMiLz4NCiAgPC9nPg0KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjE1MDkgMCAwIDEuMTQ5OSAyNi45NTkgMzMuMDEpIiBzdHJva2Utd2lkdGg9Ii45NTYyMSI+DQogICA8cGF0aCBkPSJtLTE3NC42NSAxNTQuMTFjLTEuMjQ4NCAwLTIuMjgyNiAxLjA1NzktMi4yODI2IDIuMzM0N3YwLjQ3Mzg3bDAuMDEwOSAyLjMzNDdoMjQuOThsMC4wMTA5LTIuMzM0N3YtMC40NzM4N2MwLTEuMjc2OC0xLjAzNDItMi4zMzQ3LTIuMjgyNi0yLjMzNDdoLTEwLjIxOHoiIGZpbGw9IiNmMmU3ZGEiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMzMjMyMzIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjczODYiLz4NCiAgIDxwYXRoIGQ9Im0tMTU4LjQ0IDE1NC4xMWMxLjI0ODQgMCAyLjI4MjYgMS4wNTc5IDIuMjgyNiAyLjMzNDd2MC40NzM4N2wtMC4wMTA5IDIuMzM0N2g0LjIzMzNsMC4wMTA5LTIuMzM0N3YtMC40NzM4N2MwLTEuMjc2OC0xLjAzNDItMi4zMzQ3LTIuMjgyNi0yLjMzNDd6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjMiLz4NCiAgPC9nPg0KIDwvZz4NCjwvc3ZnPg0K')}
.is2d .king.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyNS4wNSAtNjkwLjczKSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLjk1ODM2IC0yMjUuMDQgNjkyLjMxKSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZS13aWR0aD0iMS4wMjE1Ij4NCiAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyMS4wNywtMTcwLjU2KSIgc3Ryb2tlLXdpZHRoPSIxLjAyMTUiPg0KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEuMDY3NiwwLDAsMS4wOTgxLDczLjg3Miw0MjIuMTkpIiBzdHJva2Utd2lkdGg9Ii45NDM0NiI+DQogICAgIDxnIGZpbGw9IiNlN2Q2YzMiIHN0cm9rZT0iIzNjM2MzYyIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+DQogICAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguMjQ3ODMgMCAwIC4yNDA5NSAtNjMuMjQ4IC04NjQuMjEpIiBkPSJtLTc2NS4wNyAyNjQ2Yy02LjgxMzMgMC4zOTM0LTEyLjE5OSA0Ljg2NTktMTIuMjAxIDEwLjMyNiAwIDIuMjI4OSAwLjkyNDE0IDQuMzk2MyAyLjYxOTEgNi4xODE3aC0xOS43OTF2MjAuMTM1aDIxLjgzMmwtOS44NjUyIDExLjE3MyAxMC4xMDQgOC41NDU1Yy0yMS4xMDYgMS40MzA0LTQ1LjQzNCA4LjU2NjEtNDkuNzE1IDE3Ljg1Mi00Ljc5NCAxMC40MDIgMjMuNDkgNTkuNDMyIDIzLjQ5IDU5LjQzMmg2Ny4wMXMyOC4yODQtNDkuMDMxIDIzLjQ5LTU5LjQzMmMtNC4yODQ3LTkuMjk3MS0yOC43MDMtMTYuNDQyLTQ5LjgxMS0xNy44NThsMTAuMjQyLTguNTM5Ni05Ljg2NTItMTEuMTczaDIxLjgzMnYtMjAuMTM1aC0xOS43OTFjMS42OTUtMS43ODU0IDIuNjE5MS0zLjk1MjkgMi42MTkxLTYuMTgxNy0yZS0zIC01LjQ2MDItNS4zODU5LTkuOTMyOC0xMi4xOTktMTAuMzI2eiIgZmlsbD0iI2YyZTdkYSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMzMjMyMzIiIHN0cm9rZS13aWR0aD0iNy43MjE3IiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIvPg0KICAgICA8L2c+DQogICAgIDxwYXRoIGQ9Im0tMjQ3LjE1LTIxMi41OWMwLjQ0ODA2IDAgMTAuOTg3LTAuNjA3ODcgMC4xODQyNyAxOC4xMzJsMi40MDk5LTVlLTNzNy4wMDg4LTExLjgwOSA1LjgyMDctMTQuMzE1Yy0zLjg3MzgtMy42MzM2LTguNDE0OS0zLjgxMTYtOC40MTQ5LTMuODExNnoiIG9wYWNpdHk9Ii4zIi8+DQogICAgPC9nPg0KICAgPC9nPg0KICA8L2c+DQogIDxwYXRoIGQ9Im0tMjExLjgxIDcyOC44MmMtMS40MzY4IDAtMi42MjcgMS4yMTY1LTIuNjI3IDIuNjg0N3YwLjU0NDlsMC4wMTI2IDIuNjg0N2gyOC43NDlsMC4wMTI1LTIuNjg0N3YtMC41NDQ5YzAtMS40NjgyLTEuMTkwMy0yLjY4NDctMi42MjctMi42ODQ3aC0xMS43NnoiIGZpbGw9IiNmMmU3ZGEiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMzMjMyMzIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyLjAwMDEiLz4NCiAgPHBhdGggZD0ibS0xOTMuMTUgNzI4LjgyYzEuNDM2OCAwIDIuNjI3IDEuMjE2NSAyLjYyNyAyLjY4NDd2MC41NDQ5bC0wLjAxMjUgMi42ODQ3aDQuODcyMWwwLjAxMjUtMi42ODQ3di0wLjU0NDljMC0xLjQ2ODItMS4xOTAzLTIuNjg0Ny0yLjYyNy0yLjY4NDd6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjMiIHN0cm9rZS13aWR0aD0iMS4xIi8+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .pawn.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY1LjA2NSAtMTE2Ljk3KSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xMDE4IDAgMCAxLjA5OTcgLTEzMS41IC0uNjIxNikiIHN0cm9rZS13aWR0aD0iLjk5OTMyIj4NCiAgIDxwYXRoIHRyYW5zZm9ybT0ic2NhbGUoLjI2NDU4KSIgZD0ibTMxMy42NSA0NDIuMjVjLTEyLjYzMiAzLjhlLTQgLTIyLjg3MyA4LjkzMjUtMjIuODczIDE5Ljk1MyAwIDUuNzMxMyAyLjgzNTYgMTEuMTg1IDcuNzY5NSAxNC45NjloLTUuOTEwMmMtNC42NTU2IDAtOC41MDk4IDMuMjg5LTguNTA5OCA3LjI1Nzh2MS40NzI3YzAgMy45Njg2IDMuODU0MiA3LjI1NzggOC41MDk4IDcuMjU3OGg4LjQyOTdjLTAuNDExNTggMjAuMzY4LTIzLjUwMSAyNS42MDctMjMuNTAxIDQxLjg5NmwzNi4wODMtMC4wMjczaDJlLTNsMzYuMDgzIDAuMDI3M2MwLTE2LjI4OS0yMy4wODktMjEuNTI5LTIzLjUwMS00MS44OTZoOC40MzE2YzQuNjU1NiAwIDguNTA5OC0zLjI4OTIgOC41MDk4LTcuMjU3OHYtMS40NzI3YzAtMy45Njg4LTMuODU0Mi03LjI1NzgtOC41MDk4LTcuMjU3OGgtNS45MTAyYzQuOTMzOS0zLjc4NDIgNy43Njk1LTkuMjM3NCA3Ljc2OTUtMTQuOTY5IDAtMTEuMDIxLTEwLjI0MS0xOS45NTMtMjIuODczLTE5Ljk1M3oiIGZpbGw9IiM1YzUyNDgiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMxZTFkMWQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iNi44NjcyIi8+DQogICA8cGF0aCBkPSJtODIuOTg3IDExNy4wMWMtMC40ODkyNiAzZS01IC0wLjk2NDY3IDAuMDUxOS0xLjQyMDUgMC4xNDc2MiA1Ljg3MzUgMC42MTYxMyA3LjIwNCA1Ljc1NSA0LjYxNTYgOC4yMDg2LTEuODkxOCAxLjUwNDYtNy4xOTEyIDAuODgzODUtNy4xOTEyIDAuODgzODUgMi40MDMgMC4zOTM2MyA0LjY2NDIgMS43Mzg3IDYuODA2IDIuMjEzOC00LjAzOTggNi4zMjM1IDIuOTY4MiA2Ljg4NTUgMi45NjgyIDEzLjA5OGwzLjc2OTIgM2UtM2MwLjMyNzU5LTQuNDE0OC01Ljk3NTQtNS42OTYyLTYuMjE3OS0xMS4wODVoMi4yMzA2YzEuMjMyIDAgMi4yNTE0LTAuODY5OTMgMi4yNTE0LTEuOTE5OXYtMC4zODk2MmMwLTEuMDUtMS4wMTk0LTEuOTIwNC0yLjI1MTQtMS45MjA0aC0xLjU2MzhjMS4zMDU1LTEuMDAxMiAyLjA1NjEtMi40NDM5IDIuMDU1OC0zLjk2MDIgMC0yLjkxNTgtMi43MDk2LTUuMjc5NC02LjA1MTctNS4yNzk0eiIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIG9wYWNpdHk9Ii4zNSIvPg0KICA8L2c+DQogIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEuMTUwOSAwIDAgMS4xNDk5IDE0OS4xNyAtMjIuMTUzKSIgc3Ryb2tlLXdpZHRoPSIuOTU2MjEiPg0KICAgPHBhdGggZD0ibS0xNzQuNjUgMTU0LjExYy0xLjI0ODQgMC0yLjI4MjYgMS4wNTc5LTIuMjgyNiAyLjMzNDd2MC40NzM4N2wwLjAxMDkgMi4zMzQ3aDI0Ljk4bDAuMDEwOS0yLjMzNDd2LTAuNDczODdjMC0xLjI3NjgtMS4wMzQyLTIuMzM0Ny0yLjI4MjYtMi4zMzQ3aC0xMC4yMTh6IiBmaWxsPSIjNWM1MjQ4IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlPSIjMWUxZTFlIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS43Mzg2Ii8+DQogICA8cGF0aCBkPSJtLTE1OC40NCAxNTQuMTFjMS4yNDg0IDAgMi4yODI2IDEuMDU3OSAyLjI4MjYgMi4zMzQ3djAuNDczODdsLTAuMDEwOSAyLjMzNDdoNC4yMzMzbDAuMDEwOS0yLjMzNDd2LTAuNDczODdjMC0xLjI3NjgtMS4wMzQyLTIuMzM0Ny0yLjI4MjYtMi4zMzQ3eiIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIG9wYWNpdHk9Ii4zNSIvPg0KICA8L2c+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .knight.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwNS44MSAtMTcyLjk0KSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4wNjIxIDAgMCAxLjA1ODkgLTEwNi4zOCAxNzUuMjMpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlLXdpZHRoPSIxLjAzNzIiPg0KICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMyODMuMSw0MzEuNzIpIiBzdHJva2Utd2lkdGg9IjEuMDM3MiI+DQogICAgPHBhdGggY2xhc3M9InN0MjgiIGQ9Im0zMzA4LjEtNDExLjgzLTEwLjkxNCAxLjAzNjItMS4zNjg5LTQuOTI1OCAxMy42MjItNi40MzU3IDEuNjU5Ni0zLjY4NDQgOS42MDQ4IDExLjIzMWMwIDdlLTUgLTMuODc1NyAxNi42OTUtMy44NzU3IDE2LjY5NWwtMTkuMzE3LTNlLTVjMC4yMzAxLTEwLjY2NCA5LjA3NTItNy42NDk2IDEwLjU4OS0xMy45MTZ6IiBmaWxsPSIjNWM1MjQ4IiBzdHJva2U9IiMxZTFlMWUiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS44ODU5Ii8+DQogICAgPHBhdGggZD0ibTMzMTEuMS00MjUuODMtMC44Mjc0IDEuODM2IDAuNDAxMS0wLjg5MDI3YzIuNTM0NyAzLjUxNTQgNS4yNzk4IDYuODczOCA3Ljk1NTUgMTAuMjgybC00Ljk3NiAxNi42ODhoMy4xNzU1czMuODc0OC0xNi42ODQgMy44NzU5LTE2LjY4OHoiIG9wYWNpdHk9Ii4zNSIvPg0KICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0uMTU5NDUgNTcuMDc5KSIgc3Ryb2tlLXdpZHRoPSIxLjAzNzIiPjwvZz4NCiAgIDwvZz4NCiAgPC9nPg0KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjE1MDkgMCAwIDEuMTQ5OSAxMDguNDMgMzMuODIxKSIgc3Ryb2tlLXdpZHRoPSIuOTU2MjEiPg0KICAgPHBhdGggZD0ibS0xNzQuNjUgMTU0LjExYy0xLjI0ODQgMC0yLjI4MjYgMS4wNTc5LTIuMjgyNiAyLjMzNDd2MC40NzM4N2wwLjAxMDkgMi4zMzQ3aDI0Ljk4bDAuMDEwOS0yLjMzNDd2LTAuNDczODdjMC0xLjI3NjgtMS4wMzQyLTIuMzM0Ny0yLjI4MjYtMi4zMzQ3aC0xMC4yMTh6IiBmaWxsPSIjNWM1MjQ4IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlPSIjMWUxZTFlIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS43Mzg2Ii8+DQogICA8cGF0aCBkPSJtLTE1OC40NCAxNTQuMTFjMS4yNDg0IDAgMi4yODI2IDEuMDU3OSAyLjI4MjYgMi4zMzQ3djAuNDczODdsLTAuMDEwOSAyLjMzNDdoNC4yMzMzbDAuMDEwOS0yLjMzNDd2LTAuNDczODdjMC0xLjI3NjgtMS4wMzQyLTIuMzM0Ny0yLjI4MjYtMi4zMzQ3eiIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIG9wYWNpdHk9Ii4zNSIvPg0KICA8L2c+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .bishop.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE0NS42NiAtMTE2LjAzKSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMTkgMCAwIDEuMDc1MSAtMTQ1Ljk0IDExNy43OCkiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2Utd2lkdGg9IjEuMDUxIj4NCiAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMzI4LjYsNDMxLjcyKSIgc3Ryb2tlLXdpZHRoPSIxLjA1MSI+DQogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLS4xNjAwNSA1Ny4wNzkpIj4NCiAgICAgPHBhdGggZD0ibTMzNTUuNC00ODIuOTZjLTEuNDc5OC0xLjI2NjktOS4zODI2LTEuMDQ0My00LjU4MTUgNS40NTAyLTkuNzEyNiA5Ljg1OTgtMTEuMDQzIDE1LjI3OC02LjA3ODggMjIuNTEzaDE3LjY1NGM1Ljk3MTQtNi40Mjk2IDIuNTExNS0xMy41MDEtNC43MzIyLTIwLjc0Mi0yLjgyOTIgMy44MzEyLTIuNjkzNiA2LjgzNzEtMy4zNTM0IDEwLjM1M2wtNC41OTE2LTAuMDY2MWMtMC42NDY1LTUuNTg2MSA3Ljk5OTQtMTQuMDgyIDUuNjgzMi0xNy41MDh6IiBmaWxsPSIjNWM1MjQ4IiBzdHJva2U9IiMxZTFlMWUiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS45MTA4Ii8+DQogICAgIDxwYXRoIGQ9Im0zMzUzLjUtNDgzLjQ5Yy0wLjYxMzUgMC4wMTktMC4yMDMyIDAuMTgzMDctMC43NTcgMC41MjgxNCAwIDJlLTMgMC4wMSA1ZS0zIDAuMDEgN2UtMyAzLjUxNDktMC4yODkzLTIuMzI0MiAxMC45NS0zLjMzMDYgMTcuNTc0IDAuNTI2LTIuODAzNCAxLjI5OTktNS4yODM3IDMuMDI0Ny04LjExNTMgMS45NjU5LTQuMDQ3NyA0LjE1NzQtOC4wNzUgMi45NTE3LTkuNDU4OC0wLjQwMzctMC4zNTQyMi0xLjEyMzEtMC41NTkzLTEuODk4MS0wLjUzNTM2em00LjE2MDEgNy43NTYxYy0wLjU4ODIgMC43OTYzNS0wLjUwNjEgMC42MjI5Ni0wLjk1MjggMS4zNiA1Ljg5MjEgNS42MjU5IDguNTY1MSAxMi44MjQgMy4wMzg3IDE5LjM4MmgyLjY0NjRjNS45NzE0LTYuNDI5NiAyLjUxMTItMTMuNTAxLTQuNzMyMy0yMC43NDJ6IiBvcGFjaXR5PSIuMzUiLz4NCiAgICA8L2c+DQogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUuMzI2LDU3LjA3OSkiPjwvZz4NCiAgIDwvZz4NCiAgPC9nPg0KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjE1MDkgMCAwIDEuMTQ5OSA2OC41ODEgLTIzLjA5MSkiIHN0cm9rZS13aWR0aD0iLjk1NjIxIj4NCiAgIDxwYXRoIGQ9Im0tMTc0LjY1IDE1NC4xMWMtMS4yNDg0IDAtMi4yODI2IDEuMDU3OS0yLjI4MjYgMi4zMzQ3djAuNDczODdsMC4wMTA5IDIuMzM0N2gyNC45OGwwLjAxMDktMi4zMzQ3di0wLjQ3Mzg3YzAtMS4yNzY4LTEuMDM0Mi0yLjMzNDctMi4yODI2LTIuMzM0N2gtMTAuMjE4eiIgZmlsbD0iIzVjNTI0OCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzFlMWUxZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNzM4NiIvPg0KICAgPHBhdGggZD0ibS0xNTguNDQgMTU0LjExYzEuMjQ4NCAwIDIuMjgyNiAxLjA1NzkgMi4yODI2IDIuMzM0N3YwLjQ3Mzg3bC0wLjAxMDkgMi4zMzQ3aDQuMjMzM2wwLjAxMDktMi4zMzQ3di0wLjQ3Mzg3YzAtMS4yNzY4LTEuMDM0Mi0yLjMzNDctMi4yODI2LTIuMzM0N3oiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBvcGFjaXR5PSIuMzUiLz4NCiAgPC9nPg0KIDwvZz4NCjwvc3ZnPg0K')}
.is2d .rook.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICAgPGNjOmxpY2Vuc2UgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy1uZC80LjAvIi8+DQogICA8L2NjOldvcms+DQogICA8Y2M6TGljZW5zZSByZGY6YWJvdXQ9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLW5kLzQuMC8iPg0KICAgIDxjYzpwZXJtaXRzIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjUmVwcm9kdWN0aW9uIi8+DQogICAgPGNjOnBlcm1pdHMgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNEaXN0cmlidXRpb24iLz4NCiAgICA8Y2M6cmVxdWlyZXMgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNOb3RpY2UiLz4NCiAgICA8Y2M6cmVxdWlyZXMgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNBdHRyaWJ1dGlvbiIvPg0KICAgIDxjYzpwcm9oaWJpdHMgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNDb21tZXJjaWFsVXNlIi8+DQogICA8L2NjOkxpY2Vuc2U+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2Mi41MyAtMTE2LjU3KSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjg5MDI1IDAgMCAxLjA0NCAtMzI2Ny4zIDU2OC4yNykiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2Utd2lkdGg9IjEuMTQxIj4NCiAgIDxnPg0KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC45NjU4MSAzLjAxNDkgNDAuNzI4KSIgc3Ryb2tlLXdpZHRoPSIxLjE2MSI+DQogICAgIDxwYXRoIHRyYW5zZm9ybT0ic2NhbGUoLjI2NDU4KSIgZD0ibTEyODAwLTE4MTkuNHYzMC4xMDdjMCAxMi44MzYgMjcuNzI3IDE0LjgyNiAyNy43MjcgMTQuODI2LTEuNSAzOC43NTEtMjEuMzg1IDY0Ljc2Ni0yMS4zODUgNjQuNzY2bDkwLjk3MS0wLjE1NDNzLTE5Ljc0NS0yNi4wMDQtMjEuMjMtNjQuNjExYzAgMCAyOS4yOC0xLjk5MDUgMjkuMjgtMTQuODI2di0zMC4xMDdoLTIwLjAzN3MxLjk0NiA4Ljg0NC0xLjk5NSAxMi44MDljLTQuMzk2IDQuNDIyOC0xMC4yNjkgNC40MjI4LTE0LjY2NiAwLTMuOTQtMy45NjQ2LTEuOTkyLTEyLjgwOS0xLjk5Mi0xMi44MDloLTI3Ljk4MnMxLjk0OCA4Ljg0NC0xLjk5MiAxMi44MDljLTQuNzY0IDQuNzkxNy0xMS40NiA0Ljc5MTctMTYuMjIzIDAtMy45NDEtMy45NjQ2LTEuOTkyLTEyLjgwOS0xLjk5Mi0xMi44MDl6IiBmaWxsPSIjNWM1MjQ4IiBzdHJva2U9IiMxZTFlMWUiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iNy45Nzg0Ii8+DQogICAgIDxwYXRoIHRyYW5zZm9ybT0ic2NhbGUoLjI2NDU4KSIgZD0ibTEyODkyLTE4MTkuNCAwLjA2IDI5Ljc5OGMtMC4zODQgNC4wNTE3LTEwLjQxOCA5LjE5ODItMTYuOTc3IDkuNTAwMmwtNjYuMDA0IDAuMDU3Yy0xLjAxMyAwLjk1MDIgMTAuNTk1IDQuODMxOCAxNS42NjkgNS41NzcybDM3LjM4MyA0LjkwNjZjLTIuMjM0IDI0LjkxIDIyLjEwOSA1OS43OCAyMi4wODYgNTkuNzAzaDEyLjYwOHMtMTkuNzQ1LTI2LjAwMy0yMS4yMy02NC42MTFjMTAuODE0LTEuNTUxNyAxMi41NDItMy4xODc2IDE3LjE0LTQuMTUzN2gwLjA4bC0wLjAxLTAuMDE0YzQuMzQzLTAuOTI4NSAxMS45MjUtNS40MDYyIDEyLjA2NS0xMC42NTh2LTMwLjEwN3oiIG9wYWNpdHk9Ii4zMyIvPg0KICAgIDwvZz4NCiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5NS4wNDYsNTYuMjg1KSIgc3Ryb2tlLXdpZHRoPSIxLjE0MSI+PC9nPg0KICAgPC9nPg0KICA8L2c+DQogIDxwYXRoIGQ9Im0tMjQ5LjI5IDE1NC42NmMtMS40MzY4IDAtMi42MjcgMS4yMTY0LTIuNjI3IDIuNjg0NnYwLjU0NDg4bDAuMDEyNiAyLjY4NDZoMjguNzVsMC4wMTI1LTIuNjg0NnYtMC41NDQ4OGMwLTEuNDY4Mi0xLjE5MDItMi42ODQ2LTIuNjI3LTIuNjg0NmgtMTEuNzZ6IiBmaWxsPSIjNWM1MjQ4IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlPSIjMWUxZTFlIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIvPg0KICA8cGF0aCBkPSJtLTIzMC42NCAxNTQuNjZjMS40MzY4IDAgMi42MjcgMS4yMTY0IDIuNjI3IDIuNjg0NnYwLjU0NDg4bC0wLjAxMjUgMi42ODQ2aDQuODcyMWwwLjAxMjUtMi42ODQ2di0wLjU0NDg4YzAtMS40NjgyLTEuMTkwMi0yLjY4NDYtMi42MjctMi42ODQ2eiIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIG9wYWNpdHk9Ii4zMyIvPg0KIDwvZz4NCjwvc3ZnPg0K')}
.is2d .queen.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4Ni4yMiAtMTE1Ljk4KSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xODc1IDAgMCAxLjE4NzUgMjMuMDQ4IDYuNTExNikiIHN0cm9rZS13aWR0aD0iLjkyNjMiPg0KICAgPHBhdGggdHJhbnNmb3JtPSJzY2FsZSguMjY0NTgpIiBkPSJtLTU4Ni40OCAzNjcuMjdjLTguMzg3NSA3ZS00IC0xNS4xODYgNi42NzcxLTE1LjE4NiAxNC45MTIgNWUtMyA1LjkwNDEgMy41NTgxIDExLjI0OSA5LjA2MDYgMTMuNjMxLTEuMTc1IDcuMjc3OS00LjgwNiAyNC4wNTctMTQuODk2IDI1LjQ5MS03LjQ5NTQgMS4wNjQ5LTEyLjI2OS00LjA5NjQtMTUuNTMxLTEwLjAwNiAzLjUyNjgtMi41MTkgNS42MTYxLTYuNTQwMyA1LjYyMy0xMC44MjIgNC4zZS00IC03LjQwNjMtNi4xMTQ4LTEzLjQxLTEzLjY1OC0xMy40MS03LjU0MzQtMi43ZS00IC0xMy42NTkgNi4wMDM5LTEzLjY1OCAxMy40MSA0ZS0zIDYuODE5NyA1LjIyMSAxMi41NSAxMi4xMjMgMTMuMzE2bDE1LjgyOCA1NS44MjZoNjAuNTg4bDE1LjgzLTU1LjgyNmM2LjkwMTItMC43NjcyIDEyLjExNy02LjQ5NzQgMTIuMTIxLTEzLjMxNiA0LjNlLTQgLTcuNDA2My02LjExNDgtMTMuNDEtMTMuNjU4LTEzLjQxLTcuNTQyNyA3LjllLTQgLTEzLjY1NyA2LjAwNDYtMTMuNjU2IDEzLjQxIDZlLTMgNC4yODE2IDIuMDk1MSA4LjMwMjggNS42MjExIDEwLjgyMi0zLjI2MjMgNS45MS04LjAzNTggMTEuMDcxLTE1LjUzMSAxMC4wMDYtMTAuMDktMS40MzM5LTEzLjcyMS0xOC4yMTMtMTQuODk2LTI1LjQ5MSA1LjUwMjUtMi4zODE3IDkuMDU1NC03LjcyNjcgOS4wNjA2LTEzLjYzMSA3LjhlLTQgLTguMjM0My02Ljc5NjgtMTQuOTEtMTUuMTg0LTE0LjkxMnoiIGZpbGw9IiM1YzUyNDgiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMxZTFlMWUiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iNi4zNjU0Ii8+DQogICA8cGF0aCBkPSJtLTE0My4zOCAxMDIuNDFjLTAuNDUxNzUgMWUtMyAtMC44OTkyNSAwLjA4NTgtMS4zMTkzIDAuMjQ5MDggMy45OTIzIDEuNDEzNSAzLjI2NDIgNS43MzA2IDAuNDk3NjIgNi4xNjA5bC01LjUxOTUgMTUuNDMyaDIuNjQ1OGw0LjEwMjEtMTQuNzcxYzEuODI2LTAuMjAyOTkgMy4yMDYtMS43MTkxIDMuMjA3LTMuNTIzMyAxLjFlLTQgLTEuOTU5Ni0xLjYxNzktMy41NDgyLTMuNjEzNy0zLjU0ODF6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjM1Ii8+DQogIDwvZz4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xNTA5IDAgMCAxLjE0OTkgMjguMDE0IC0yMy4xNDQpIiBzdHJva2Utd2lkdGg9Ii45NTYyMSI+DQogICA8cGF0aCBkPSJtLTE3NC42NSAxNTQuMTFjLTEuMjQ4NCAwLTIuMjgyNiAxLjA1NzktMi4yODI2IDIuMzM0N3YwLjQ3Mzg3bDAuMDEwOSAyLjMzNDdoMjQuOThsMC4wMTA5LTIuMzM0N3YtMC40NzM4N2MwLTEuMjc2OC0xLjAzNDItMi4zMzQ3LTIuMjgyNi0yLjMzNDdoLTEwLjIxOHoiIGZpbGw9IiM1YzUyNDgiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMxZTFlMWUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjczODYiLz4NCiAgIDxwYXRoIGQ9Im0tMTU4LjQ0IDE1NC4xMWMxLjI0ODQgMCAyLjI4MjYgMS4wNTc5IDIuMjgyNiAyLjMzNDd2MC40NzM4N2wtMC4wMTA5IDIuMzM0N2g0LjIzMzNsMC4wMTA5LTIuMzM0N3YtMC40NzM4N2MwLTEuMjc2OC0xLjAzNDItMi4zMzQ3LTIuMjgyNi0yLjMzNDd6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjM1Ii8+DQogIDwvZz4NCiA8L2c+DQo8L3N2Zz4NCg==')}
.is2d .king.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyNS4wNSAtNjkwLjczKSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLjk1ODM2IC0yMjUuMDQgNjkyLjMxKSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZS13aWR0aD0iMS4wMjE1Ij4NCiAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyMS4wNywtMTcwLjU2KSIgc3Ryb2tlLXdpZHRoPSIxLjAyMTUiPg0KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEuMDY3NiwwLDAsMS4wOTgxLDczLjg3Miw0MjIuMTkpIiBzdHJva2Utd2lkdGg9Ii45NDM0NiI+DQogICAgIDxnIGZpbGw9IiNlN2Q2YzMiIHN0cm9rZT0iIzNjM2MzYyIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+DQogICAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguMjQ3ODMgMCAwIC4yNDA5NSAtNjMuMjQ4IC04NjQuMjEpIiBkPSJtLTc2NS4wNyAyNjQ2Yy02LjgxMzMgMC4zOTM0LTEyLjE5OSA0Ljg2NTktMTIuMjAxIDEwLjMyNiAwIDIuMjI4OSAwLjkyNDE0IDQuMzk2MyAyLjYxOTEgNi4xODE3aC0xOS43OTF2MjAuMTM1aDIxLjgzMmwtOS44NjUyIDExLjE3MyAxMC4xMDQgOC41NDU1Yy0yMS4xMDYgMS40MzA0LTQ1LjQzNCA4LjU2NjEtNDkuNzE1IDE3Ljg1Mi00Ljc5NCAxMC40MDIgMjMuNDkgNTkuNDMyIDIzLjQ5IDU5LjQzMmg2Ny4wMXMyOC4yODQtNDkuMDMxIDIzLjQ5LTU5LjQzMmMtNC4yODQ3LTkuMjk3MS0yOC43MDMtMTYuNDQyLTQ5LjgxMS0xNy44NThsMTAuMjQyLTguNTM5Ni05Ljg2NTItMTEuMTczaDIxLjgzMnYtMjAuMTM1aC0xOS43OTFjMS42OTUtMS43ODU0IDIuNjE5MS0zLjk1MjkgMi42MTkxLTYuMTgxNy0yZS0zIC01LjQ2MDItNS4zODU5LTkuOTMyOC0xMi4xOTktMTAuMzI2eiIgZmlsbD0iIzVjNTI0OCIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMxZTFlMWUiIHN0cm9rZS13aWR0aD0iNy43MjE3IiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIvPg0KICAgICA8L2c+DQogICAgIDxwYXRoIGQ9Im0tMjQ3LjE1LTIxMi41OWMwLjQ0ODA2IDAgMTAuOTg3LTAuNjA3ODcgMC4xODQyNyAxOC4xMzJsMi40MDk5LTVlLTNzNy4wMDg4LTExLjgwOSA1LjgyMDctMTQuMzE1Yy0zLjg3MzgtMy42MzM2LTguNDE0OS0zLjgxMTYtOC40MTQ5LTMuODExNnoiIG9wYWNpdHk9Ii4zIi8+DQogICAgPC9nPg0KICAgPC9nPg0KICA8L2c+DQogIDxwYXRoIGQ9Im0tMjExLjgxIDcyOC44MmMtMS40MzY4IDAtMi42MjcgMS4yMTY1LTIuNjI3IDIuNjg0N3YwLjU0NDlsMC4wMTI2IDIuNjg0N2gyOC43NDlsMC4wMTI1LTIuNjg0N3YtMC41NDQ5YzAtMS40NjgyLTEuMTkwMy0yLjY4NDctMi42MjctMi42ODQ3aC0xMS43NnoiIGZpbGw9IiM1YzUyNDgiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMxZTFlMWUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyLjAwMDEiLz4NCiAgPHBhdGggZD0ibS0xOTMuMTUgNzI4LjgyYzEuNDM2OCAwIDIuNjI3IDEuMjE2NSAyLjYyNyAyLjY4NDd2MC41NDQ5bC0wLjAxMjUgMi42ODQ3aDQuODcyMWwwLjAxMjUtMi42ODQ3di0wLjU0NDljMC0xLjQ2ODItMS4xOTAzLTIuNjg0Ny0yLjYyNy0yLjY4NDd6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjMiIHN0cm9rZS13aWR0aD0iMS4xIi8+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .pawn.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4NCiA8ZGVmcz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4MzUiIHgxPSIyNzQuMTMiIHgyPSIzNTMuMTciIHkxPSI0ODguNjUiIHkyPSI0ODguNjUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjI5MTUxIDAgMCAuMjkwOTYgLTY2LjQyNiAtMTE3LjM5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIyNDQiLz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDIyNDQiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2YyZTdkYSIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjYmJhMzhhIiBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4MzMiIHgxPSItMTc3LjgiIHgyPSItMTUxLjA2IiB5MT0iMTU2LjY4IiB5Mj0iMTU2LjY4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMTUwOSAwIDAgMS4xNDk5IDIxNC4yNCAtMTM4LjkyKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIyNDQiLz4NCiA8L2RlZnM+DQogPG1ldGFkYXRhPg0KICA8cmRmOlJERj4NCiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4NCiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+DQogICAgPGRjOnRpdGxlLz4NCiAgIDwvY2M6V29yaz4NCiAgPC9yZGY6UkRGPg0KIDwvbWV0YWRhdGE+DQogPGcgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPHBhdGggZD0ibTI1LjAwOCAxMS4yODJjLTMuNjgyNCAxLjExZS00IC02LjY2NzggMi41OTktNi42Njc4IDUuODA1NSAwIDEuNjY3NiAwLjgyNjYyIDMuMjU0NCAyLjI2NDkgNC4zNTU0aC0xLjcyMjljLTEuMzU3MiAwLTIuNDgwNyAwLjk1Njk2LTIuNDgwNyAyLjExMTd2MC40Mjg1YzAgMS4xNTQ3IDEuMTIzNiAyLjExMTcgMi40ODA3IDIuMTExN2gyLjQ1NzRjLTAuMTE5OTggNS45MjYyLTYuODUwOSA3LjQ1MDYtNi44NTA5IDEyLjE5bDEwLjUxOS0wLjAwNzloNS44M2UtNGwxMC41MTkgMC4wMDc5YzAtNC43Mzk0LTYuNzMwOC02LjI2NC02Ljg1MDktMTIuMTloMi40NTc5YzEuMzU3MiAwIDIuNDgwNy0wLjk1NzAyIDIuNDgwNy0yLjExMTd2LTAuNDI4NWMwLTEuMTU0OC0xLjEyMzYtMi4xMTE3LTIuNDgwNy0yLjExMTdoLTEuNzIyOWMxLjQzODMtMS4xMDEgMi4yNjQ5LTIuNjg3NyAyLjI2NDktNC4zNTU0IDAtMy4yMDY3LTIuOTg1NC01LjgwNTUtNi42Njc4LTUuODA1NXoiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQxODM1KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzMyMzIzMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4NCiAgPHBhdGggZD0ibTI1LjAxIDExLjI4MmMtMC41MzkwNyAzLjNlLTUgLTEuMDYyOSAwLjA1NzA3LTEuNTY1MSAwLjE2MjM0IDYuNDcxNCAwLjY3NzU2IDcuOTM3NCA2LjMyODggNS4wODU1IDkuMDI3LTIuMDg0NCAxLjY1NDYtNy45MjMzIDAuOTcxOTctNy45MjMzIDAuOTcxOTcgMi42NDc2IDAuNDMyODggNS4xMzkgMS45MTIgNy40OTg4IDIuNDM0NS00LjQ1MTEgNi45NTQgMy4yNzA0IDcuNTcyIDMuMjcwNCAxNC40MDRsNC4xNTI5IDAuMDAzM2MwLjM2MDk0LTQuODU1LTYuNTgzNy02LjI2NDEtNi44NTA5LTEyLjE5aDIuNDU3N2MxLjM1NzQgMCAyLjQ4MDYtMC45NTY2NiAyLjQ4MDYtMi4xMTEzdi0wLjQyODQ2YzAtMS4xNTQ3LTEuMTIzMi0yLjExMTktMi40ODA2LTIuMTExOWgtMS43MjNjMS40Mzg0LTEuMTAxIDIuMjY1NC0yLjY4NzYgMi4yNjUxLTQuMzU1IDAtMy4yMDY1LTIuOTg1NC01LjgwNTgtNi42Njc4LTUuODA1OHoiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBvcGFjaXR5PSIuMyIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4NCiAgPHBhdGggZD0ibTEzLjI0IDM4LjI4NmMtMS40MzY4IDAtMi42MjcgMS4yMTY1LTIuNjI3IDIuNjg0N3YwLjU0NDlsMC4wMTI1NCAyLjY4NDdoMjguNzQ5bDAuMDEyNTQtMi42ODQ3di0wLjU0NDljMC0xLjQ2ODItMS4xOTAzLTIuNjg0Ny0yLjYyNy0yLjY4NDdoLTExLjc2eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDE4MzMpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlPSIjMzIzMjMyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS42Ii8+DQogIDxwYXRoIGQ9Im0zMS44OTYgMzguMjg2YzEuNDM2OCAwIDIuNjI3IDEuMjE2NSAyLjYyNyAyLjY4NDd2MC41NDQ5bC0wLjAxMjU0IDIuNjg0N2g0Ljg3MjFsMC4wMTI1NS0yLjY4NDd2LTAuNTQ0OWMwLTEuNDY4Mi0xLjE5MDMtMi42ODQ3LTIuNjI3LTIuNjg0N3oiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBvcGFjaXR5PSIuMyIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4NCiA8L2c+DQo8L3N2Zz4NCg==')}
.is2d .knight.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4NCiA8ZGVmcz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4NjEiIHgxPSIzMjk1LjEiIHgyPSIzMzIxLjUiIHkxPSItNDExLjg4IiB5Mj0iLTQxMS44OCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjA2MjEgMCAwIDEuMDU4OSAtMzQ4Ny41IDQ1OS42MykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyMjQ0Ii8+DQogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQyMjQ0Ij4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMmU3ZGEiIG9mZnNldD0iMCIvPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2JiYTM4YSIgb2Zmc2V0PSIxIi8+DQogIDwvbGluZWFyR3JhZGllbnQ+DQogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQxODU5IiB4MT0iLTE3Ny42MyIgeDI9Ii0xNTEuMjQiIHkxPSIxNTYuNjgiIHkyPSIxNTYuNjgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xNTA5IDAgMCAxLjE0OTkgMjE0LjI0IC0xMzguOTIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjI0NCIvPg0KIDwvZGVmcz4NCiA8bWV0YWRhdGE+DQogIDxyZGY6UkRGPg0KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPg0KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4NCiAgICA8ZGM6dGl0bGUvPg0KICAgPC9jYzpXb3JrPg0KICA8L3JkZjpSREY+DQogPC9tZXRhZGF0YT4NCiA8ZyBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPg0KICA8cGF0aCBjbGFzcz0ic3QyOCIgZD0ibTI1Ljk4NyAyMy41NDYtMTEuNTkyIDEuMDk3Mi0xLjQ1MzktNS4yMTU5IDE0LjQ2OC02LjgxNDggMS43NjI3LTMuOTAxNCAxMC4yMDEgMTEuODkzYzAgNy40ZS01IC00LjExNjQgMTcuNjc4LTQuMTE2NCAxNy42NzhsLTIwLjUxNy0zLjJlLTVjMC4yNDQzOS0xMS4yOTIgOS42Mzg4LTguMTAwMiAxMS4yNDctMTQuNzM2eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDE4NjEpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlPSIjMzIzMjMyIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNiIvPg0KICA8cGF0aCBkPSJtMjkuMTczIDguNzIwOS0wLjg3ODc4IDEuOTQ0MSAwLjQyNjAxLTAuOTQyNzFjMi42OTIxIDMuNzIyNSA1LjYwNzcgNy4yNzg3IDguNDQ5NSAxMC44ODhsLTUuMjg1IDE3LjY3MWgzLjM3MjdzNC4xMTU0LTE3LjY2NyA0LjExNjYtMTcuNjcxeiIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIG9wYWNpdHk9Ii4zIiBzdHJva2Utd2lkdGg9IjEuMDk5OSIvPg0KICA8cGF0aCBkPSJtMTMuMjQgMzguMjg2Yy0xLjQzNjggMC0yLjYyNyAxLjIxNjUtMi42MjcgMi42ODQ3djAuNTQ0OWwwLjAxMjU0IDIuNjg0N2gyOC43NDlsMC4wMTI1NC0yLjY4NDd2LTAuNTQ0OWMwLTEuNDY4Mi0xLjE5MDMtMi42ODQ3LTIuNjI3LTIuNjg0N2gtMTEuNzZ6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTg1OSkiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMzMjMyMzIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4NCiAgPHBhdGggZD0ibTMxLjg5NiAzOC4yODZjMS40MzY4IDAgMi42MjcgMS4yMTY1IDIuNjI3IDIuNjg0N3YwLjU0NDlsLTAuMDEyNTQgMi42ODQ3aDQuODcyMWwwLjAxMjU1LTIuNjg0N3YtMC41NDQ5YzAtMS40NjgyLTEuMTkwMy0yLjY4NDctMi42MjctMi42ODQ3eiIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIG9wYWNpdHk9Ii4zIiBzdHJva2Utd2lkdGg9IjEuMSIvPg0KIDwvZz4NCjwvc3ZnPg0K')}
.is2d .bishop.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4NCiA8ZGVmcz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4NDkiIHgxPSIzMzQxLjIiIHgyPSIzMzY2LjIiIHkxPSItNDY5LjI4IiB5Mj0iLTQ2OS4yOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAxOSAwIDAgMS4wNzUxIC0zMzkyLjMgNTI3LjQ1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIyNDQiLz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDIyNDQiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2YyZTdkYSIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjYmJhMzhhIiBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4NTEiIHgxPSItMTc3LjYzIiB4Mj0iLTE1MS4yNCIgeTE9IjE1Ni42OCIgeTI9IjE1Ni42OCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjE1MDkgMCAwIDEuMTQ5OSAyMTQuMjQgLTEzOC45MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyMjQ0Ii8+DQogPC9kZWZzPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbC1ydWxlPSJldmVub2RkIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+DQogIDxwYXRoIGQ9Im0yNi44NyA4LjIyMzVjLTUuNzk2OC0yLjI5ODUtNi45NTI1IDIuNTI2My00LjY2ODUgNS44NTk1LTkuODk3MSAxMC42LTExLjI1MyAxNi40MjUtNi4xOTQzIDI0LjIwNGgxNy45ODljNi4wODQ5LTYuOTEyNSAyLjU1OTItMTQuNTE1LTQuODIyMS0yMi4zLTIuODgzIDQuMTE4OS0zLjI3MzkgNy4zNTA2LTMuOTQ2MyAxMS4xMzFsLTMuNjIwNS0wLjA3MTA2NGMtMC42NTg3OC02LjAwNTYgNy42MjIyLTE1LjE0IDUuMjYyLTE4LjgyM3oiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQxODQ5KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzMyMzIzMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4NCiAgPHBhdGggZD0ibTI0LjkzMyA3LjY1MzdjLTAuNjI1MTYgMC4wMjA0MjctMC4yMDcwNiAwLjE5NjgyLTAuNzcxMzggMC41Njc4IDAgMC4wMDIxNSAwLjAxMDE5IDAuMDA1MzggMC4wMTAxOSAwLjAwNzUzIDMuNTgxNy0wLjMxMTAzLTIuMzY4NCAxMS43NzItMy4zOTM5IDE4Ljg5NCAwLjUzNTk5LTMuMDEzOSAxLjMyNDYtNS42ODA1IDMuMDgyMi04LjcyNDggMi4wMDMzLTQuMzUxNyA0LjIzNjQtOC42ODE0IDMuMDA3OC0xMC4xNjktMC40MTEzNy0wLjM4MDgyLTEuMTQ0NC0wLjYwMTMtMS45MzQyLTAuNTc1NTd6bTQuMjM5MSA4LjMzODZjLTAuNTk5MzggMC44NTYxNi0wLjUxNTcyIDAuNjY5NzQtMC45NzA5IDEuNDYyMSA2LjAwNCA2LjA0ODQgOC43Mjc4IDEzLjc4NyAzLjA5NjQgMjAuODM4aDIuNjk2N2M2LjA4NDktNi45MTI1IDIuNTU4OS0xNC41MTUtNC44MjIyLTIyLjN6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjMiIHN0cm9rZS13aWR0aD0iMS4xMDAxIi8+DQogIDxwYXRoIGQ9Im0xMy4yNCAzOC4yODZjLTEuNDM2OCAwLTIuNjI3IDEuMjE2NS0yLjYyNyAyLjY4NDd2MC41NDQ5bDAuMDEyNTQgMi42ODQ3aDI4Ljc0OWwwLjAxMjU0LTIuNjg0N3YtMC41NDQ5YzAtMS40NjgyLTEuMTkwMy0yLjY4NDctMi42MjctMi42ODQ3aC0xMS43NnoiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQxODUxKSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzMyMzIzMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNiIvPg0KICA8cGF0aCBkPSJtMzEuODk2IDM4LjI4NmMxLjQzNjggMCAyLjYyNyAxLjIxNjUgMi42MjcgMi42ODQ3djAuNTQ0OWwtMC4wMTI1NCAyLjY4NDdoNC44NzIxbDAuMDEyNTUtMi42ODQ3di0wLjU0NDljMC0xLjQ2ODItMS4xOTAzLTIuNjg0Ny0yLjYyNy0yLjY4NDd6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjMiIHN0cm9rZS13aWR0aD0iMS4xIi8+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .rook.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4NCiA8ZGVmcz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4NzEiIHgxPSIxMjc5NyIgeDI9IjEyOTA5IiB5MT0iLTE3NjQuNiIgeTI9Ii0xNzY0LjYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIzNTU0IDAgMCAuMjY2NzggLTMwMDIuMSA0OTQuNDIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjI0NCIvPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjI0NCI+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjZjJlN2RhIiBvZmZzZXQ9IjAiLz4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiNiYmEzOGEiIG9mZnNldD0iMSIvPg0KICA8L2xpbmVhckdyYWRpZW50Pg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTg2OSIgeDE9Ii0yNTIuNzIiIHgyPSItMjIyLjM0IiB5MT0iMTU3LjYyIiB5Mj0iMTU3LjYyIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDI2Mi41MyAtMTE2LjM3KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIyNDQiLz4NCiA8L2RlZnM+DQogPG1ldGFkYXRhPg0KICA8cmRmOlJERj4NCiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4NCiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+DQogICAgPGRjOnRpdGxlLz4NCiAgIDwvY2M6V29yaz4NCiAgPC9yZGY6UkRGPg0KIDwvbWV0YWRhdGE+DQogPGcgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPHBhdGggZD0ibTEyLjg1NSA5LjA0MXY4LjAzMTljMCAzLjQyNDQgNi41MzA5IDMuOTU1MiA2LjUzMDkgMy45NTUybC0zLjk3ODggMTcuMjc4IDE5LjMxMS0wLjA0MTE2My0zLjk0MjMtMTcuMjM3czYuODk2Ny0wLjUzMTAyIDYuODk2Ny0zLjk1NTJ2LTguMDMxOWgtNC43MTk2czAuNDU4MzYgMi4zNTk0LTAuNDY5OTEgMy40MTcyYy0xLjAzNTQgMS4xNzk5LTIuNDE4OCAxLjE3OTktMy40NTQ1IDAtMC45MjgwNC0xLjA1NzctMC40NjkyLTMuNDE3Mi0wLjQ2OTItMy40MTcyaC02LjU5MDlzMC40NTg4NCAyLjM1OTQtMC40NjkyIDMuNDE3MmMtMS4xMjIxIDEuMjc4My0yLjY5OTMgMS4yNzgzLTMuODIxMiAwLTAuOTI4MjctMS4wNTc3LTAuNDY5Mi0zLjQxNzItMC40NjkyLTMuNDE3MnoiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQxODcxKSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzMyMzIzMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4NCiAgPHBhdGggZD0ibTM0LjUyNSA5LjA0MSAwLjAxNDEzIDcuOTQ5NGMtMC4wOTA0NSAxLjA4MDktMi40NTM5IDIuNDUzOS0zLjk5ODggMi41MzQ0bC0xNS41NDcgMC4wMTUyMWMtMC4yMzg2IDAuMjUzNDkgMi40OTU2IDEuMjg5IDMuNjkwNyAxLjQ4NzkgMTIuODMtMC43Mjg3NiAxMC40MzggMy42NTU2IDEyLjk0OSAxNy4yMzZoMy4wODQ3YzAgMi4xNGUtNCAtMS43MTUyLTYuMzk0NC00LjA1NzItMTcuMjM3IDIuNTQ3Mi0wLjQxMzk2IDIuOTU0Mi0wLjg1MDM4IDQuMDM3Mi0xLjEwODFoMC4wMTg4NGwtMC4wMDI0LTAuMDAzN2MxLjAyMy0wLjI0NzcgMi44MDg4LTEuNDQyMyAyLjg0MTgtMi44NDMzdi04LjAzMTl6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjMzIiBzdHJva2Utd2lkdGg9Ii4yOTEwMyIvPg0KICA8cGF0aCBkPSJtMTMuMjM5IDM4LjI4NmMtMS40MzY4IDAtMi42MjcgMS4yMTY0LTIuNjI3IDIuNjg0NnYwLjU0NDg4bDAuMDEyNiAyLjY4NDZoMjguNzVsMC4wMTI1LTIuNjg0NnYtMC41NDQ4OGMwLTEuNDY4Mi0xLjE5MDItMi42ODQ2LTIuNjI3LTIuNjg0NmgtMTEuNzZ6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTg2OSkiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMzMjMyMzIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4NCiAgPHBhdGggZD0ibTMxLjg4OSAzOC4yODZjMS40MzY4IDAgMi42MjcgMS4yMTY0IDIuNjI3IDIuNjg0NnYwLjU0NDg4bC0wLjAxMjUgMi42ODQ2aDQuODcyMWwwLjAxMjUtMi42ODQ2di0wLjU0NDg4YzAtMS40NjgyLTEuMTkwMi0yLjY4NDYtMi42MjctMi42ODQ2eiIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIG9wYWNpdHk9Ii4zMyIvPg0KIDwvZz4NCjwvc3ZnPg0K')}
.is2d .queen.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4NCiA8ZGVmcz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4NzkiIHgxPSItNjQ3LjI3IiB4Mj0iLTUyNS42OSIgeTE9IjQxOC40NCIgeTI9IjQxOC40NCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMzE0MTkgMCAwIC4zMTQxOSAyMDkuMjcgLTEwOS4yNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyMjQ0Ii8+DQogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQyMjQ0Ij4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMmU3ZGEiIG9mZnNldD0iMCIvPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2JiYTM4YSIgb2Zmc2V0PSIxIi8+DQogIDwvbGluZWFyR3JhZGllbnQ+DQogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQxODgxIiB4MT0iLTE3Ny42MyIgeDI9Ii0xNTEuMjQiIHkxPSIxNTYuNjgiIHkyPSIxNTYuNjgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xNTA5IDAgMCAxLjE0OTkgMjE0LjIzIC0xMzguOTIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjI0NCIvPg0KIDwvZGVmcz4NCiA8bWV0YWRhdGE+DQogIDxyZGY6UkRGPg0KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPg0KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4NCiAgICA8ZGM6dGl0bGUvPg0KICAgPC9jYzpXb3JrPg0KICA8L3JkZjpSREY+DQogPC9tZXRhZGF0YT4NCiA8ZyBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPg0KICA8cGF0aCBkPSJtMjUgNi4xMjIxYy0yLjYzNTMgMi4xOTllLTQgLTQuNzcxMyAyLjA5NzktNC43NzEzIDQuNjg1MiAwLjAwMTYgMS44NTUgMS4xMTc5IDMuNTM0MyAyLjg0NjcgNC4yODI3LTAuMzY5MTcgMi4yODY2LTEuNTEgNy41NTg0LTQuNjgwMiA4LjAwOS0yLjM1NSAwLjMzNDU4LTMuODU0OC0xLjI4Ny00Ljg3OTctMy4xNDM4IDEuMTA4MS0wLjc5MTQ0IDEuNzY0NS0yLjA1NDkgMS43NjY3LTMuNDAwMiAxLjM1ZS00IC0yLjMyNy0xLjkyMTItNC4yMTMzLTQuMjkxMi00LjIxMzMtMi4zNzAxLTguNWUtNSAtNC4yOTE1IDEuODg2NC00LjI5MTIgNC4yMTMzIDAuMDAxMjYgMi4xNDI3IDEuNjQwNCAzLjk0MzEgMy44MDg5IDQuMTgzN2w0Ljk3MyAxNy41NGgxOS4wMzZsNC45NzM2LTE3LjU0YzIuMTY4My0wLjI0MTA0IDMuODA3LTIuMDQxNCAzLjgwODMtNC4xODM3IDEuMzVlLTQgLTIuMzI3LTEuOTIxMi00LjIxMzMtNC4yOTEyLTQuMjEzMy0yLjM2OTggMi40OGUtNCAtNC4yOTA5IDEuODg2Ni00LjI5MDYgNC4yMTMzIDAuMDAxOSAxLjM0NTIgMC42NTgyNiAyLjYwODYgMS43NjYxIDMuNDAwMi0xLjAyNSAxLjg1NjktMi41MjQ4IDMuNDc4NC00Ljg3OTcgMy4xNDM4LTMuMTcwMi0wLjQ1MDUyLTQuMzExLTUuNzIyMy00LjY4MDItOC4wMDkgMS43Mjg4LTAuNzQ4MyAyLjg0NTEtMi40Mjc2IDIuODQ2Ny00LjI4MjcgMi40NWUtNCAtMi41ODcxLTIuMTM1NS00LjY4NDYtNC43NzA2LTQuNjg1MnoiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQxODc5KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzMyMzIzMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4NCiAgPHBhdGggZD0ibTM5LjAwMiAxMi4zNDJjLTAuNTM2NDUgMC4wMDEyLTEuMDY3OSAwLjEwMTg5LTEuNTY2NyAwLjI5NTc4IDQuNzQwOSAxLjY3ODUgMy44NzYyIDYuODA1MSAwLjU5MDkyIDcuMzE2MWwtNy42MTI3IDE4LjMyNmg0LjIwMDJsNC44NzEyLTE3LjU0MWMyLjE2ODQtMC4yNDEwNSAzLjgwNzEtMi4wNDE0IDMuODA4My00LjE4MzkgMS4zZS00IC0yLjMyNy0xLjkyMTMtNC4yMTM1LTQuMjkxMy00LjIxMzR6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjMiIHN0cm9rZS13aWR0aD0iMS4xIi8+DQogIDxwYXRoIGQ9Im0xMy4yMjcgMzguMjg2Yy0xLjQzNjggMC0yLjYyNyAxLjIxNjUtMi42MjcgMi42ODQ3djAuNTQ0OWwwLjAxMjU0IDIuNjg0N2gyOC43NDlsMC4wMTI1NC0yLjY4NDd2LTAuNTQ0OWMwLTEuNDY4Mi0xLjE5MDMtMi42ODQ3LTIuNjI3LTIuNjg0N2gtMTEuNzZ6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTg4MSkiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMzMjMyMzIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4NCiAgPHBhdGggZD0ibTMxLjg4MyAzOC4yODZjMS40MzY4IDAgMi42MjcgMS4yMTY1IDIuNjI3IDIuNjg0N3YwLjU0NDlsLTAuMDEyNTQgMi42ODQ3aDQuODcyMWwwLjAxMjU0LTIuNjg0N3YtMC41NDQ5YzAtMS40NjgyLTEuMTkwMy0yLjY4NDctMi42MjctMi42ODQ3eiIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIG9wYWNpdHk9Ii4zIiBzdHJva2Utd2lkdGg9IjEuMSIvPg0KIDwvZz4NCjwvc3ZnPg0K')}
.is2d .king.white {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4NCiA8ZGVmcz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4ODkiIHgxPSItODI1Ljc1IiB4Mj0iLTcwNC40NCIgeTE9IjI3MTIuOCIgeTI9IjI3MTIuOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjY0NTggMCAwIC4yNTM1NyAyMjcuNDMgLTY2Ni41NSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyMjQ0Ii8+DQogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQyMjQ0Ij4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMmU3ZGEiIG9mZnNldD0iMCIvPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2JiYTM4YSIgb2Zmc2V0PSIxIi8+DQogIDwvbGluZWFyR3JhZGllbnQ+DQogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQxODkxIiB4MT0iLTIxNS4yNCIgeDI9Ii0xODQuODYiIHkxPSI3MzEuNzgiIHkyPSI3MzEuNzgiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjI1LjA1IC02OTAuNTMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjI0NCIvPg0KIDwvZGVmcz4NCiA8bWV0YWRhdGE+DQogIDxyZGY6UkRGPg0KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPg0KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4NCiAgICA8ZGM6dGl0bGUvPg0KICAgPC9jYzpXb3JrPg0KICA8L3JkZjpSREY+DQogPC9tZXRhZGF0YT4NCiA8ZyBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPg0KICA8cGF0aCBkPSJtMjUuMDA2IDMuODcxMmMtMS44MDI3IDAuMDk5NzU0LTMuMjI3NyAxLjIzMzgtMy4yMjgyIDIuNjE4NCAwIDAuNTY1MTggMC4yNDQ1MSAxLjY0MzkgMC42OTI5NyAyLjA5NjdoLTUuNzY1NXY1LjEwNTZoNi4zMDU2bC0yLjYxMDIgMi44MzMxIDIuNjczNCAyLjE2NjljLTUuNTg0MyAwLjM2MjcxLTEyLjAyMSAxLjY0MjktMTMuMTU0IDMuOTk3Ni0xLjI2ODQgMi42Mzc2IDYuMjE1MSAxNS41OTkgNi4yMTUxIDE1LjU5OWgxNy43M3M3LjQ4MzUtMTIuOTYyIDYuMjE1MS0xNS41OTljLTEuMTMzNy0yLjM1NzUtNy41OTQzLTMuNjQtMTMuMTc5LTMuOTk5MWwyLjcwOTktMi4xNjU0LTIuNjEwMi0yLjgzMzFoNi4zMDU2di01LjEwNTZoLTUuNzY1NWMwLjQ0ODQ3LTAuNDUyNzIgMC42OTI5Ny0xLjUzMTUgMC42OTI5Ny0yLjA5NjctNS4yOWUtNCAtMS4zODQ1LTEuNDI1LTIuNTE4Ny0zLjIyNzctMi42MTg0eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDE4ODkpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlPSIjMzIzMjMyIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNiIgc3R5bGU9InBhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiLz4NCiAgPHBhdGggZD0ibTMxLjI5NCAzOC4yODUgMi41NzI4LTAuMDA1M3M3LjQ4MjYtMTIuNDI3IDYuMjE0Mi0xNS4wNjVjLTQuMTM1Ny0zLjgyMzktMTMuMTgtNC41MjQ3LTEzLjE4LTQuNTI0NyAxMS4wNSAyLjgyMTYgMTIuNjE4IDUuMDI4MSA0LjM5MjggMTkuNTk1eiIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIG9wYWNpdHk9Ii4zIi8+DQogIDxwYXRoIGQ9Im0xMy4yNDIgMzguMjg2Yy0xLjQzNjggMC0yLjYyNyAxLjIxNjUtMi42MjcgMi42ODQ3djAuNTQ0OWwwLjAxMjYgMi42ODQ3aDI4Ljc0OWwwLjAxMjUtMi42ODQ3di0wLjU0NDljMC0xLjQ2ODItMS4xOTAzLTIuNjg0Ny0yLjYyNy0yLjY4NDdoLTExLjc2eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDE4OTEpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlPSIjMzIzMjMyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS42Ii8+DQogIDxwYXRoIGQ9Im0zMS45MDIgMzguMjg2YzEuNDM2OCAwIDIuNjI3IDEuMjE2NSAyLjYyNyAyLjY4NDd2MC41NDQ5bC0wLjAxMjUgMi42ODQ3aDQuODcyMWwwLjAxMjUtMi42ODQ3di0wLjU0NDljMC0xLjQ2ODItMS4xOTAzLTIuNjg0Ny0yLjYyNy0yLjY4NDd6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjMiIHN0cm9rZS13aWR0aD0iMS4xIi8+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .pawn.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4NCiA8ZGVmcz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4MzUtNCIgeDE9IjI3NC4xMyIgeDI9IjM1My4xNyIgeTE9IjQ4OC42NSIgeTI9IjQ4OC42NSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjkxNTEgMCAwIC4yOTA5NiAtNjYuNDI2IC0xMTcuMzkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjI1MCIvPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjI1MCI+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjNzk2YzYwIiBvZmZzZXQ9IjAiLz4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiM0YjQwM2IiIG9mZnNldD0iMSIvPg0KICA8L2xpbmVhckdyYWRpZW50Pg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTgzMy04IiB4MT0iLTE3Ny44IiB4Mj0iLTE1MS4wNiIgeTE9IjE1Ni42OCIgeTI9IjE1Ni42OCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjE1MDkgMCAwIDEuMTQ5OSAyMTQuMjQgLTEzOC45MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyMjUwIi8+DQogPC9kZWZzPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbC1ydWxlPSJldmVub2RkIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+DQogIDxwYXRoIGQ9Im0yNS4wMDggMTEuMjgyYy0zLjY4MjQgMS4xMWUtNCAtNi42Njc4IDIuNTk5LTYuNjY3OCA1LjgwNTUgMCAxLjY2NzYgMC44MjY2MiAzLjI1NDQgMi4yNjQ5IDQuMzU1NGgtMS43MjI5Yy0xLjM1NzIgMC0yLjQ4MDcgMC45NTY5Ni0yLjQ4MDcgMi4xMTE3djAuNDI4NWMwIDEuMTU0NyAxLjEyMzYgMi4xMTE3IDIuNDgwNyAyLjExMTdoMi40NTc0Yy0wLjExOTk4IDUuOTI2Mi02Ljg1MDkgNy40NTA2LTYuODUwOSAxMi4xOWwxMC41MTktMC4wMDc5aDUuODNlLTRsMTAuNTE5IDAuMDA3OWMwLTQuNzM5NC02LjczMDgtNi4yNjQtNi44NTA5LTEyLjE5aDIuNDU3OWMxLjM1NzIgMCAyLjQ4MDctMC45NTcwMiAyLjQ4MDctMi4xMTE3di0wLjQyODVjMC0xLjE1NDgtMS4xMjM2LTIuMTExNy0yLjQ4MDctMi4xMTE3aC0xLjcyMjljMS40MzgzLTEuMTAxIDIuMjY0OS0yLjY4NzcgMi4yNjQ5LTQuMzU1NCAwLTMuMjA2Ny0yLjk4NTQtNS44MDU1LTYuNjY3OC01LjgwNTV6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTgzNS00KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzFlMWUxZSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4NCiAgPHBhdGggZD0ibTI1LjAxIDExLjI4MmMtMC41MzkwNyAzLjNlLTUgLTEuMDYyOSAwLjA1NzA3LTEuNTY1MSAwLjE2MjM0IDYuNDcxNCAwLjY3NzU2IDcuOTM3NCA2LjMyODggNS4wODU1IDkuMDI3LTIuMDg0NCAxLjY1NDYtNy45MjMzIDAuOTcxOTctNy45MjMzIDAuOTcxOTcgMi42NDc2IDAuNDMyODggNS4xMzkgMS45MTIgNy40OTg4IDIuNDM0NS00LjQ1MTEgNi45NTQgMy4yNzA0IDcuNTcyIDMuMjcwNCAxNC40MDRsNC4xNTI5IDAuMDAzM2MwLjM2MDk0LTQuODU1LTYuNTgzNy02LjI2NDEtNi44NTA5LTEyLjE5aDIuNDU3N2MxLjM1NzQgMCAyLjQ4MDYtMC45NTY2NiAyLjQ4MDYtMi4xMTEzdi0wLjQyODQ2YzAtMS4xNTQ3LTEuMTIzMi0yLjExMTktMi40ODA2LTIuMTExOWgtMS43MjNjMS40Mzg0LTEuMTAxIDIuMjY1NC0yLjY4NzYgMi4yNjUxLTQuMzU1IDAtMy4yMDY1LTIuOTg1NC01LjgwNTgtNi42Njc4LTUuODA1OHoiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBvcGFjaXR5PSIuMyIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4NCiAgPHBhdGggZD0ibTEzLjI0IDM4LjI4NmMtMS40MzY4IDAtMi42MjcgMS4yMTY1LTIuNjI3IDIuNjg0N3YwLjU0NDlsMC4wMTI1NCAyLjY4NDdoMjguNzQ5bDAuMDEyNTQtMi42ODQ3di0wLjU0NDljMC0xLjQ2ODItMS4xOTAzLTIuNjg0Ny0yLjYyNy0yLjY4NDdoLTExLjc2eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDE4MzMtOCkiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2U9IiMxZTFlMWUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4NCiAgPHBhdGggZD0ibTMxLjg5NiAzOC4yODZjMS40MzY4IDAgMi42MjcgMS4yMTY1IDIuNjI3IDIuNjg0N3YwLjU0NDlsLTAuMDEyNTQgMi42ODQ3aDQuODcyMWwwLjAxMjU1LTIuNjg0N3YtMC41NDQ5YzAtMS40NjgyLTEuMTkwMy0yLjY4NDctMi42MjctMi42ODQ3eiIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIG9wYWNpdHk9Ii4zIiBzdHJva2Utd2lkdGg9IjEuMSIvPg0KIDwvZz4NCjwvc3ZnPg0K')}
.is2d .knight.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4NCiA8ZGVmcz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4NjEtNCIgeDE9IjMyOTUuMSIgeDI9IjMzMjEuNSIgeTE9Ii00MTEuODgiIHkyPSItNDExLjg4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDYyMSAwIDAgMS4wNTg5IC0zNDg3LjUgNDU5LjYzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIyNTAiLz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDIyNTAiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzc5NmM2MCIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjNGI0MDNiIiBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDIyMTYiIHgxPSItMTc3LjYzIiB4Mj0iLTE1MS4yNCIgeTE9IjE1Ni42OCIgeTI9IjE1Ni42OCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjE1MDkgMCAwIDEuMTQ5OSAyMTQuMjQgLTEzOC45MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyMjUwIi8+DQogPC9kZWZzPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICA8L2NjOldvcms+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbC1ydWxlPSJldmVub2RkIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+DQogIDxwYXRoIGNsYXNzPSJzdDI4IiBkPSJtMjUuOTg3IDIzLjU0Ni0xMS41OTIgMS4wOTcyLTEuNDUzOS01LjIxNTkgMTQuNDY4LTYuODE0OCAxLjc2MjctMy45MDE0IDEwLjIwMSAxMS44OTNjMCA3LjRlLTUgLTQuMTE2NCAxNy42NzgtNC4xMTY0IDE3LjY3OGwtMjAuNTE3LTMuMmUtNWMwLjI0NDM5LTExLjI5MiA5LjYzODgtOC4xMDAyIDExLjI0Ny0xNC43MzZ6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTg2MS00KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzFlMWUxZSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4NCiAgPHBhdGggZD0ibTI5LjE3MyA4LjcyMDktMC44Nzg3OCAxLjk0NDEgMC40MjYwMS0wLjk0MjcxYzIuNjkyMSAzLjcyMjUgNS42MDc3IDcuMjc4NyA4LjQ0OTUgMTAuODg4bC01LjI4NSAxNy42NzFoMy4zNzI3czQuMTE1NC0xNy42NjcgNC4xMTY2LTE3LjY3MXoiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBvcGFjaXR5PSIuMyIgc3Ryb2tlLXdpZHRoPSIxLjA5OTkiLz4NCiAgPHBhdGggZD0ibTEzLjI0IDM4LjI4NmMtMS40MzY4IDAtMi42MjcgMS4yMTY1LTIuNjI3IDIuNjg0N3YwLjU0NDlsMC4wMTI1NCAyLjY4NDdoMjguNzQ5bDAuMDEyNTQtMi42ODQ3di0wLjU0NDljMC0xLjQ2ODItMS4xOTAzLTIuNjg0Ny0yLjYyNy0yLjY4NDdoLTExLjc2eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDIyMTYpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlPSIjMWUxZTFlIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS42Ii8+DQogIDxwYXRoIGQ9Im0zMS44OTYgMzguMjg2YzEuNDM2OCAwIDIuNjI3IDEuMjE2NSAyLjYyNyAyLjY4NDd2MC41NDQ5bC0wLjAxMjU0IDIuNjg0N2g0Ljg3MjFsMC4wMTI1NS0yLjY4NDd2LTAuNTQ0OWMwLTEuNDY4Mi0xLjE5MDMtMi42ODQ3LTIuNjI3LTIuNjg0N3oiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBvcGFjaXR5PSIuMyIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4NCiA8L2c+DQo8L3N2Zz4NCg==')}
.is2d .bishop.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4NCiA8ZGVmcz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4NDktMSIgeDE9IjMzNDEuMiIgeDI9IjMzNjYuMiIgeTE9Ii00NjkuMjgiIHkyPSItNDY5LjI4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjI1MCIvPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjI1MCI+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjNzk2YzYwIiBvZmZzZXQ9IjAiLz4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiM0YjQwM2IiIG9mZnNldD0iMSIvPg0KICA8L2xpbmVhckdyYWRpZW50Pg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjIxNCIgeDE9Ii0xNzcuNjMiIHgyPSItMTUxLjI0IiB5MT0iMTU2LjY4IiB5Mj0iMTU2LjY4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjI1MCIvPg0KIDwvZGVmcz4NCiA8bWV0YWRhdGE+DQogIDxyZGY6UkRGPg0KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPg0KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4NCiAgICA8ZGM6dGl0bGUvPg0KICAgPC9jYzpXb3JrPg0KICA8L3JkZjpSREY+DQogPC9tZXRhZGF0YT4NCiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSguMDAzNDQzMyAuMTk2MDEpIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTQ1LjY2LC0xMTYuMDMpIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPg0KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMTksMCwwLDEuMDc1MSwtMTQ1Ljk0LDExNy43OCkiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzdHJva2Utd2lkdGg9IjEuMDUxIj4NCiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzMyOC42LDQzMS43MikiIHN0cm9rZS13aWR0aD0iMS4wNTEiPg0KICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtLjE2MDA1IDU3LjA3OSkiPg0KICAgICAgPHBhdGggZD0ibTMzNTUuNC00ODIuOTZjLTUuNjg4Ny0yLjEzNzktNi44MjI5IDIuMzQ5OC00LjU4MTUgNS40NTAyLTkuNzEyNiA5Ljg1OTgtMTEuMDQzIDE1LjI3OC02LjA3ODggMjIuNTEzaDE3LjY1NGM1Ljk3MTQtNi40Mjk2IDIuNTExNS0xMy41MDEtNC43MzIyLTIwLjc0Mi0yLjgyOTIgMy44MzEyLTMuMjEyOSA2LjgzNzEtMy44NzI3IDEwLjM1M2wtMy41NTMtMC4wNjYxYy0wLjY0NjUtNS41ODYxIDcuNDgwMS0xNC4wODIgNS4xNjM5LTE3LjUwOHoiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQxODQ5LTEpIiBzdHJva2U9IiMxZTFlMWUiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Mjg3Ii8+DQogICAgICA8cGF0aCBkPSJtMzM1My41LTQ4My40OWMtMC42MTM1IDAuMDE5LTAuMjAzMiAwLjE4MzA3LTAuNzU3IDAuNTI4MTQgMCAyZS0zIDAuMDEgNWUtMyAwLjAxIDdlLTMgMy41MTQ5LTAuMjg5My0yLjMyNDIgMTAuOTUtMy4zMzA2IDE3LjU3NCAwLjUyNi0yLjgwMzQgMS4yOTk5LTUuMjgzNyAzLjAyNDctOC4xMTUzIDEuOTY1OS00LjA0NzcgNC4xNTc0LTguMDc1IDIuOTUxNy05LjQ1ODgtMC40MDM3LTAuMzU0MjItMS4xMjMxLTAuNTU5My0xLjg5ODEtMC41MzUzNnptNC4xNjAxIDcuNzU2MWMtMC41ODgyIDAuNzk2MzUtMC41MDYxIDAuNjIyOTYtMC45NTI4IDEuMzYgNS44OTIxIDUuNjI1OSA4LjU2NTEgMTIuODI0IDMuMDM4NyAxOS4zODJoMi42NDY0YzUuOTcxNC02LjQyOTYgMi41MTEyLTEzLjUwMS00LjczMjMtMjAuNzQyeiIgb3BhY2l0eT0iLjMiLz4NCiAgICAgPC9nPg0KICAgIDwvZz4NCiAgIDwvZz4NCiAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEuMTUwOSwwLDAsMS4xNDk5LDY4LjU4MSwtMjMuMDkxKSIgc3Ryb2tlLXdpZHRoPSIuOTU2MjEiPg0KICAgIDxwYXRoIGQ9Im0tMTc0LjY1IDE1NC4xMWMtMS4yNDg0IDAtMi4yODI2IDEuMDU3OS0yLjI4MjYgMi4zMzQ3djAuNDczODdsMC4wMTA5IDIuMzM0N2gyNC45OGwwLjAxMDktMi4zMzQ3di0wLjQ3Mzg3YzAtMS4yNzY4LTEuMDM0Mi0yLjMzNDctMi4yODI2LTIuMzM0N2gtMTAuMjE4eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDIyMTQpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlPSIjMWUxZTFlIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS4zOTA4Ii8+DQogICAgPHBhdGggZD0ibS0xNTguNDQgMTU0LjExYzEuMjQ4NCAwIDIuMjgyNiAxLjA1NzkgMi4yODI2IDIuMzM0N3YwLjQ3Mzg3bC0wLjAxMDkgMi4zMzQ3aDQuMjMzM2wwLjAxMDktMi4zMzQ3di0wLjQ3Mzg3YzAtMS4yNzY4LTEuMDM0Mi0yLjMzNDctMi4yODI2LTIuMzM0N3oiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBvcGFjaXR5PSIuMyIvPg0KICAgPC9nPg0KICA8L2c+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .rook.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4NCiA8ZGVmcz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4NzEtNiIgeDE9IjEyNzk3IiB4Mj0iMTI5MDkiIHkxPSItMTc2NC42IiB5Mj0iLTE3NjQuNiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjM1NTQgMCAwIC4yNjY3OCAtMzAwMi4xIDQ5NC40MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyMjUwIi8+DQogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQyMjUwIj4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiM3OTZjNjAiIG9mZnNldD0iMCIvPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzRiNDAzYiIgb2Zmc2V0PSIxIi8+DQogIDwvbGluZWFyR3JhZGllbnQ+DQogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQxODY5LTIiIHgxPSItMjUyLjcyIiB4Mj0iLTIyMi4zNCIgeTE9IjE1Ny42MiIgeTI9IjE1Ny42MiIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgyNjIuNTMgLTExNi4zNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyMjUwIi8+DQogPC9kZWZzPg0KIDxtZXRhZGF0YT4NCiAgPHJkZjpSREY+DQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQogICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPg0KICAgIDxkYzp0aXRsZS8+DQogICAgPGNjOmxpY2Vuc2UgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy1uZC80LjAvIi8+DQogICA8L2NjOldvcms+DQogICA8Y2M6TGljZW5zZSByZGY6YWJvdXQ9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLW5kLzQuMC8iPg0KICAgIDxjYzpwZXJtaXRzIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjUmVwcm9kdWN0aW9uIi8+DQogICAgPGNjOnBlcm1pdHMgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNEaXN0cmlidXRpb24iLz4NCiAgICA8Y2M6cmVxdWlyZXMgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNOb3RpY2UiLz4NCiAgICA8Y2M6cmVxdWlyZXMgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNBdHRyaWJ1dGlvbiIvPg0KICAgIDxjYzpwcm9oaWJpdHMgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNDb21tZXJjaWFsVXNlIi8+DQogICA8L2NjOkxpY2Vuc2U+DQogIDwvcmRmOlJERj4NCiA8L21ldGFkYXRhPg0KIDxnIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbC1ydWxlPSJldmVub2RkIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+DQogIDxwYXRoIGQ9Im0xMi44NTUgOS4wNDF2OC4wMzE5YzAgMy40MjQ0IDYuNTMwOSAzLjk1NTIgNi41MzA5IDMuOTU1MmwtMy45Nzg4IDE3LjI3OCAxOS4zMTEtMC4wNDExNjMtMy45NDIzLTE3LjIzN3M2Ljg5NjctMC41MzEwMiA2Ljg5NjctMy45NTUydi04LjAzMTloLTQuNzE5NnMwLjQ1ODM2IDIuMzU5NC0wLjQ2OTkxIDMuNDE3MmMtMS4wMzU0IDEuMTc5OS0yLjQxODggMS4xNzk5LTMuNDU0NSAwLTAuOTI4MDQtMS4wNTc3LTAuNDY5Mi0zLjQxNzItMC40NjkyLTMuNDE3MmgtNi41OTA5czAuNDU4ODQgMi4zNTk0LTAuNDY5MiAzLjQxNzJjLTEuMTIyMSAxLjI3ODMtMi42OTkzIDEuMjc4My0zLjgyMTIgMC0wLjkyODI3LTEuMDU3Ny0wLjQ2OTItMy40MTcyLTAuNDY5Mi0zLjQxNzJ6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTg3MS02KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzFlMWUxZSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4NCiAgPHBhdGggZD0ibTM0LjUyNSA5LjA0MSAwLjAxNDEzIDcuOTQ5NGMtMC4wOTA0NSAxLjA4MDktMi40NTM5IDIuNDUzOS0zLjk5ODggMi41MzQ0bC0xNS41NDcgMC4wMTUyMWMtMC4yMzg2IDAuMjUzNDkgMi40OTU2IDEuMjg5IDMuNjkwNyAxLjQ4NzkgMTIuODMtMC43Mjg3NiAxMC40MzggMy42NTU2IDEyLjk0OSAxNy4yMzZoMy4wODQ3YzAgMi4xNGUtNCAtMS43MTUyLTYuMzk0NC00LjA1NzItMTcuMjM3IDIuNTQ3Mi0wLjQxMzk2IDIuOTU0Mi0wLjg1MDM4IDQuMDM3Mi0xLjEwODFoMC4wMTg4NGwtMC4wMDI0LTAuMDAzN2MxLjAyMy0wLjI0NzcgMi44MDg4LTEuNDQyMyAyLjg0MTgtMi44NDMzdi04LjAzMTl6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjMzIiBzdHJva2Utd2lkdGg9Ii4yOTEwMyIvPg0KICA8cGF0aCBkPSJtMTMuMjM5IDM4LjI4NmMtMS40MzY4IDAtMi42MjcgMS4yMTY0LTIuNjI3IDIuNjg0NnYwLjU0NDg4bDAuMDEyNiAyLjY4NDZoMjguNzVsMC4wMTI1LTIuNjg0NnYtMC41NDQ4OGMwLTEuNDY4Mi0xLjE5MDItMi42ODQ2LTIuNjI3LTIuNjg0NmgtMTEuNzZ6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTg2OS0yKSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzFlMWUxZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNiIvPg0KICA8cGF0aCBkPSJtMzEuODg5IDM4LjI4NmMxLjQzNjggMCAyLjYyNyAxLjIxNjQgMi42MjcgMi42ODQ2djAuNTQ0ODhsLTAuMDEyNSAyLjY4NDZoNC44NzIxbDAuMDEyNS0yLjY4NDZ2LTAuNTQ0ODhjMC0xLjQ2ODItMS4xOTAyLTIuNjg0Ni0yLjYyNy0yLjY4NDZ6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjMzIi8+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .queen.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4NCiA8ZGVmcz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4NzktMCIgeDE9Ii02NDcuMjciIHgyPSItNTI1LjY5IiB5MT0iNDE4LjQ0IiB5Mj0iNDE4LjQ0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4zMTQxOSAwIDAgLjMxNDE5IDIwOS4yNyAtMTA5LjI3KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIyNTAiLz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDIyNTAiPg0KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzc5NmM2MCIgb2Zmc2V0PSIwIi8+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjNGI0MDNiIiBvZmZzZXQ9IjEiLz4NCiAgPC9saW5lYXJHcmFkaWVudD4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4ODEtMiIgeDE9Ii0xNzcuNjMiIHgyPSItMTUxLjI0IiB5MT0iMTU2LjY4IiB5Mj0iMTU2LjY4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMTUwOSAwIDAgMS4xNDk5IDIxNC4yMyAtMTM4LjkyKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIyNTAiLz4NCiA8L2RlZnM+DQogPG1ldGFkYXRhPg0KICA8cmRmOlJERj4NCiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4NCiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+DQogICAgPGRjOnRpdGxlLz4NCiAgIDwvY2M6V29yaz4NCiAgPC9yZGY6UkRGPg0KIDwvbWV0YWRhdGE+DQogPGcgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4NCiAgPHBhdGggZD0ibTI1IDYuMTIyMWMtMi42MzUzIDIuMTk5ZS00IC00Ljc3MTMgMi4wOTc5LTQuNzcxMyA0LjY4NTIgMC4wMDE2IDEuODU1IDEuMTE3OSAzLjUzNDMgMi44NDY3IDQuMjgyNy0wLjM2OTE3IDIuMjg2Ni0xLjUxIDcuNTU4NC00LjY4MDIgOC4wMDktMi4zNTUgMC4zMzQ1OC0zLjg1NDgtMS4yODctNC44Nzk3LTMuMTQzOCAxLjEwODEtMC43OTE0NCAxLjc2NDUtMi4wNTQ5IDEuNzY2Ny0zLjQwMDIgMS4zNWUtNCAtMi4zMjctMS45MjEyLTQuMjEzMy00LjI5MTItNC4yMTMzLTIuMzcwMS04LjVlLTUgLTQuMjkxNSAxLjg4NjQtNC4yOTEyIDQuMjEzMyAwLjAwMTI2IDIuMTQyNyAxLjY0MDQgMy45NDMxIDMuODA4OSA0LjE4MzdsNC45NzMgMTcuNTRoMTkuMDM2bDQuOTczNi0xNy41NGMyLjE2ODMtMC4yNDEwNCAzLjgwNy0yLjA0MTQgMy44MDgzLTQuMTgzNyAxLjM1ZS00IC0yLjMyNy0xLjkyMTItNC4yMTMzLTQuMjkxMi00LjIxMzMtMi4zNjk4IDIuNDhlLTQgLTQuMjkwOSAxLjg4NjYtNC4yOTA2IDQuMjEzMyAwLjAwMTkgMS4zNDUyIDAuNjU4MjYgMi42MDg2IDEuNzY2MSAzLjQwMDItMS4wMjUgMS44NTY5LTIuNTI0OCAzLjQ3ODQtNC44Nzk3IDMuMTQzOC0zLjE3MDItMC40NTA1Mi00LjMxMS01LjcyMjMtNC42ODAyLTguMDA5IDEuNzI4OC0wLjc0ODMgMi44NDUxLTIuNDI3NiAyLjg0NjctNC4yODI3IDIuNDVlLTQgLTIuNTg3MS0yLjEzNTUtNC42ODQ2LTQuNzcwNi00LjY4NTJ6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTg3OS0wKSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzFlMWUxZSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4NCiAgPHBhdGggZD0ibTM5LjAwMiAxMi4zNDJjLTAuNTM2NDUgMC4wMDEyLTEuMDY3OSAwLjEwMTg5LTEuNTY2NyAwLjI5NTc4IDQuNzQwOSAxLjY3ODUgMy44NzYyIDYuODA1MSAwLjU5MDkyIDcuMzE2MWwtNy42MTI3IDE4LjMyNmg0LjIwMDJsNC44NzEyLTE3LjU0MWMyLjE2ODQtMC4yNDEwNSAzLjgwNzEtMi4wNDE0IDMuODA4My00LjE4MzkgMS4zZS00IC0yLjMyNy0xLjkyMTMtNC4yMTM1LTQuMjkxMy00LjIxMzR6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjMiIHN0cm9rZS13aWR0aD0iMS4xIi8+DQogIDxwYXRoIGQ9Im0xMy4yMjcgMzguMjg2Yy0xLjQzNjggMC0yLjYyNyAxLjIxNjUtMi42MjcgMi42ODQ3djAuNTQ0OWwwLjAxMjU0IDIuNjg0N2gyOC43NDlsMC4wMTI1NC0yLjY4NDd2LTAuNTQ0OWMwLTEuNDY4Mi0xLjE5MDMtMi42ODQ3LTIuNjI3LTIuNjg0N2gtMTEuNzZ6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTg4MS0yKSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzFlMWUxZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNiIvPg0KICA8cGF0aCBkPSJtMzEuODgzIDM4LjI4NmMxLjQzNjggMCAyLjYyNyAxLjIxNjUgMi42MjcgMi42ODQ3djAuNTQ0OWwtMC4wMTI1NCAyLjY4NDdoNC44NzIxbDAuMDEyNTQtMi42ODQ3di0wLjU0NDljMC0xLjQ2ODItMS4xOTAzLTIuNjg0Ny0yLjYyNy0yLjY4NDd6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjMiIHN0cm9rZS13aWR0aD0iMS4xIi8+DQogPC9nPg0KPC9zdmc+DQo=')}
.is2d .king.black {background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjUwbW0iIGhlaWdodD0iNTBtbSIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdGV4dC1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTAgNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4NCiA8ZGVmcz4NCiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE4ODktMiIgeDE9Ii04MjUuNzUiIHgyPSItNzA0LjQ0IiB5MT0iMjcxMi44IiB5Mj0iMjcxMi44IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjI1MCIvPg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjI1MCI+DQogICA8c3RvcCBzdG9wLWNvbG9yPSIjNzk2YzYwIiBvZmZzZXQ9IjAiLz4NCiAgIDxzdG9wIHN0b3AtY29sb3I9IiM0YjQwM2IiIG9mZnNldD0iMSIvPg0KICA8L2xpbmVhckdyYWRpZW50Pg0KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjIzOCIgeDE9Ii0yMTUuMjQiIHgyPSItMTg0Ljg2IiB5MT0iNzMxLjc4IiB5Mj0iNzMxLjc4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjI1MCIvPg0KIDwvZGVmcz4NCiA8bWV0YWRhdGE+DQogIDxyZGY6UkRGPg0KICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPg0KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4NCiAgICA8ZGM6dGl0bGUvPg0KICAgPC9jYzpXb3JrPg0KICA8L3JkZjpSREY+DQogPC9tZXRhZGF0YT4NCiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSguMDAyMTYyMyAuMTk1NykiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbC1ydWxlPSJldmVub2RkIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPg0KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjUuMDUsLTY5MC43MykiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbC1ydWxlPSJldmVub2RkIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+DQogICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAuOTU4MzYgLTIyNS4wNCA2OTIuMzEpIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgc3Ryb2tlLXdpZHRoPSIxLjAyMTUiPg0KICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyMS4wNywtMTcwLjU2KSIgc3Ryb2tlLXdpZHRoPSIxLjAyMTUiPg0KICAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjA2NzYsMCwwLDEuMDk4MSw3My44NzIsNDIyLjE5KSIgc3Ryb2tlLXdpZHRoPSIuOTQzNDYiPg0KICAgICAgPGcgZmlsbD0iI2U3ZDZjMyIgc3Ryb2tlPSIjM2MzYzNjIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4NCiAgICAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguMjQ3ODMgMCAwIC4yNDA5NSAtNjMuMjQ4IC04NjQuMjEpIiBkPSJtLTc2NS4wNyAyNjQzLjljLTYuODEzMyAwLjM5MzQtMTIuMTk5IDQuODY1OS0xMi4yMDEgMTAuMzI2IDAgMi4yMjg5IDAuOTI0MTQgNi40ODMyIDIuNjE5MSA4LjI2ODZoLTIxLjc5MXYyMC4xMzVoMjMuODMybC05Ljg2NTIgMTEuMTczIDEwLjEwNCA4LjU0NTVjLTIxLjEwNiAxLjQzMDQtNDUuNDM0IDYuNDc5Mi00OS43MTUgMTUuNzY1LTQuNzk0IDEwLjQwMiAyMy40OSA2MS41MTkgMjMuNDkgNjEuNTE5aDY3LjAxczI4LjI4NC01MS4xMTggMjMuNDktNjEuNTE5Yy00LjI4NDctOS4yOTcxLTI4LjcwMy0xNC4zNTUtNDkuODExLTE1Ljc3MWwxMC4yNDItOC41Mzk2LTkuODY1Mi0xMS4xNzNoMjMuODMydi0yMC4xMzVoLTIxLjc5MWMxLjY5NS0xLjc4NTQgMi42MTkxLTYuMDM5OCAyLjYxOTEtOC4yNjg2LTJlLTMgLTUuNDYwMi01LjM4NTktOS45MzI4LTEyLjE5OS0xMC4zMjZ6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTg4OS0yKSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMxZTFlMWUiIHN0cm9rZS13aWR0aD0iNi4xNzcyIiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIvPg0KICAgICAgPC9nPg0KICAgICAgPHBhdGggZD0ibS0yNDYuOTctMTk0LjQ2IDIuNDA5OS01ZS0zczcuMDA4OC0xMS44MDkgNS44MjA3LTE0LjMxNWMtMy44NzM4LTMuNjMzNi0xMi4zNDUtNC4yOTk1LTEyLjM0NS00LjI5OTUgMTAuMzUgMi42ODEyIDExLjgxOSA0Ljc3NzkgNC4xMTQ2IDE4LjYyeiIgb3BhY2l0eT0iLjMiLz4NCiAgICAgPC9nPg0KICAgIDwvZz4NCiAgIDwvZz4NCiAgIDxwYXRoIGQ9Im0tMjExLjgxIDcyOC44MmMtMS40MzY4IDAtMi42MjcgMS4yMTY1LTIuNjI3IDIuNjg0N3YwLjU0NDlsMC4wMTI2IDIuNjg0N2gyOC43NDlsMC4wMTI1LTIuNjg0N3YtMC41NDQ5YzAtMS40NjgyLTEuMTkwMy0yLjY4NDctMi42MjctMi42ODQ3aC0xMS43NnoiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQyMjM4KSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHN0cm9rZT0iIzFlMWUxZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNiIvPg0KICAgPHBhdGggZD0ibS0xOTMuMTUgNzI4LjgyYzEuNDM2OCAwIDIuNjI3IDEuMjE2NSAyLjYyNyAyLjY4NDd2MC41NDQ5bC0wLjAxMjUgMi42ODQ3aDQuODcyMWwwLjAxMjUtMi42ODQ3di0wLjU0NDljMC0xLjQ2ODItMS4xOTAzLTIuNjg0Ny0yLjYyNy0yLjY4NDd6IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgb3BhY2l0eT0iLjMiIHN0cm9rZS13aWR0aD0iMS4xIi8+DQogIDwvZz4NCiA8L2c+DQo8L3N2Zz4NCg==')}

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<linearGradient id="linearGradient2720-5" x1="13269" x2="13269" y1="-9662.7" y2="-9519" gradientTransform="matrix(.26458 0 0 .26458 -3485.7 2562.6)" gradientUnits="userSpaceOnUse">
<linearGradient id="linearGradient2720-5" x1="13197" x2="13341" y1="-9591.1" y2="-9591.1" gradientTransform="matrix(.26458 0 0 .26458 -3485.7 2562.6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#3c3c3c" offset="0"/>
<stop offset="1"/>
</linearGradient>
@ -11,8 +11,8 @@
<filter id="filter845" color-interpolation-filters="sRGB">
<feFlood flood-color="rgb(0,0,0)" flood-opacity=".49804" result="flood"/>
<feComposite in="flood" in2="SourceGraphic" operator="in" result="composite1"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.6"/>
<feOffset dx="1.6" dy="1.4" result="offset"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.3"/>
<feOffset dx="1" dy="1" result="offset"/>
<feComposite in="SourceGraphic" in2="offset" result="composite2"/>
</filter>
</defs>

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<linearGradient id="linearGradient2981-3" x1="3501" x2="3501" y1="-2466" y2="-2428" gradientTransform="matrix(.99997 0 0 1.0271 -3475.9 2537.8)" gradientUnits="userSpaceOnUse">
<linearGradient id="linearGradient2981-3" x1="3481.5" x2="3520.5" y1="-2447" y2="-2447" gradientTransform="matrix(.99997 0 0 1.0271 -3475.9 2537.8)" gradientUnits="userSpaceOnUse">
<stop stop-color="#3c3c3c" offset="0"/>
<stop offset="1"/>
</linearGradient>
@ -11,8 +11,8 @@
<filter id="filter839" color-interpolation-filters="sRGB">
<feFlood flood-color="rgb(0,0,0)" flood-opacity=".49804" result="flood"/>
<feComposite in="flood" in2="SourceGraphic" operator="in" result="composite1"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.6"/>
<feOffset dx="1.6" dy="1.4" result="offset"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.3"/>
<feOffset dx="1" dy="1" result="offset"/>
<feComposite in="SourceGraphic" in2="offset" result="composite2"/>
</filter>
</defs>

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<linearGradient id="linearGradient1841" x1="10720" x2="10722" y1="-8163.6" y2="-8025.3" gradientTransform="matrix(.26671 0 0 .26515 -2835.2 2171.3)" gradientUnits="userSpaceOnUse">
<linearGradient id="linearGradient1841" x1="10653" x2="10795" y1="-8094.7" y2="-8094.7" gradientTransform="matrix(.26671 0 0 .26515 -2835.2 2171.3)" gradientUnits="userSpaceOnUse">
<stop stop-color="#3c3c3c" offset="0"/>
<stop offset="1"/>
</linearGradient>
<filter id="filter847" color-interpolation-filters="sRGB">
<feFlood flood-color="rgb(0,0,0)" flood-opacity=".49804" result="flood"/>
<feComposite in="flood" in2="SourceGraphic" operator="in" result="composite1"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.6"/>
<feOffset dx="1.6" dy="1.4" result="offset"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.3"/>
<feOffset dx="1" dy="1" result="offset"/>
<feComposite in="SourceGraphic" in2="offset" result="composite2"/>
</filter>
</defs>

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<linearGradient id="linearGradient3001-0" x1="4181.6" x2="4181.6" y1="-2618.6" y2="-2496.2" gradientTransform="matrix(.26749 0 0 .26799 -1093.5 713.11)" gradientUnits="userSpaceOnUse">
<linearGradient id="linearGradient3001-0" x1="4127.2" x2="4235.7" y1="-2558.3" y2="-2558.3" gradientTransform="matrix(.26749 0 0 .26799 -1093.5 713.11)" gradientUnits="userSpaceOnUse">
<stop stop-color="#3c3c3c" offset="0"/>
<stop offset="1"/>
</linearGradient>
<filter id="filter835" color-interpolation-filters="sRGB">
<feFlood flood-color="rgb(0,0,0)" flood-opacity=".49804" result="flood"/>
<feComposite in="flood" in2="SourceGraphic" operator="in" result="composite1"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.6"/>
<feOffset dx="1.6" dy="1.4" result="offset"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.3"/>
<feOffset dx="1" dy="1" result="offset"/>
<feComposite in="SourceGraphic" in2="offset" result="composite2"/>
</filter>
</defs>

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<linearGradient id="linearGradient8684-4" x1="-51.163" x2="-51.157" y1="-101.39" y2="-64.739" gradientTransform="matrix(.97644 0 0 .99286 74.952 107.73)" gradientUnits="userSpaceOnUse">
<linearGradient id="linearGradient8684-4" x1="-71.637" x2="-30.678" y1="-83.325" y2="-83.325" gradientTransform="matrix(.97644 0 0 .99286 74.952 107.73)" gradientUnits="userSpaceOnUse">
<stop stop-color="#3c3c3c" offset="0"/>
<stop offset="1"/>
</linearGradient>
@ -11,8 +11,8 @@
<filter id="filter839" color-interpolation-filters="sRGB">
<feFlood flood-color="rgb(0,0,0)" flood-opacity=".49804" result="flood"/>
<feComposite in="flood" in2="SourceGraphic" operator="in" result="composite1"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.6"/>
<feOffset dx="1.6" dy="1.4" result="offset"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.3"/>
<feOffset dx="1" dy="1" result="offset"/>
<feComposite in="SourceGraphic" in2="offset" result="composite2"/>
</filter>
</defs>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<linearGradient id="linearGradient2999-1" x1="4548" x2="4548" y1="-638.77" y2="-506.05" gradientTransform="matrix(.34208 0 0 .2837 -1530.8 187.39)" gradientUnits="userSpaceOnUse">
<linearGradient id="linearGradient2999-1" x1="4501.5" x2="4594.6" y1="-572.4" y2="-572.4" gradientTransform="matrix(.34208 0 0 .2837 -1530.8 187.39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#3c3c3c" offset="0"/>
<stop offset="1"/>
</linearGradient>
<filter id="filter842" color-interpolation-filters="sRGB">
<feFlood flood-color="rgb(0,0,0)" flood-opacity=".49804" result="flood"/>
<feComposite in="flood" in2="SourceGraphic" operator="in" result="composite1"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.6"/>
<feOffset dx="1.6" dy="1.4" result="offset"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.3"/>
<feOffset dx="1" dy="1" result="offset"/>
<feComposite in="SourceGraphic" in2="offset" result="composite2"/>
</filter>
</defs>

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<linearGradient id="linearGradient2720" x1="13269" x2="13269" y1="-9662.7" y2="-9519" gradientTransform="matrix(.26458 0 0 .26458 -3485.7 2562.6)" gradientUnits="userSpaceOnUse">
<linearGradient id="linearGradient2720" x1="13197" x2="13341" y1="-9591" y2="-9591" gradientTransform="matrix(.26458 0 0 .26458 -3485.7 2562.6)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" offset="0"/>
<stop stop-color="#e6e6e6" offset="1"/>
</linearGradient>
@ -11,8 +11,8 @@
<filter id="filter845" color-interpolation-filters="sRGB">
<feFlood flood-color="rgb(0,0,0)" flood-opacity=".49804" result="flood"/>
<feComposite in="flood" in2="SourceGraphic" operator="in" result="composite1"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.6"/>
<feOffset dx="1.6" dy="1.4" result="offset"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.3"/>
<feOffset dx="1" dy="1" result="offset"/>
<feComposite in="SourceGraphic" in2="offset" result="composite2"/>
</filter>
</defs>

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<linearGradient id="linearGradient2981" x1="3501" x2="3501" y1="-2466" y2="-2428" gradientTransform="matrix(.99997 0 0 1.0271 -3475.9 2537.8)" gradientUnits="userSpaceOnUse">
<linearGradient id="linearGradient2981" x1="3481.5" x2="3520.5" y1="-2449.5" y2="-2447" gradientTransform="matrix(.99997 0 0 1.0271 -3475.9 2537.8)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" offset="0"/>
<stop stop-color="#e6e6e6" offset="1"/>
</linearGradient>
@ -11,8 +11,8 @@
<filter id="filter839" color-interpolation-filters="sRGB">
<feFlood flood-color="rgb(0,0,0)" flood-opacity=".49804" result="flood"/>
<feComposite in="flood" in2="SourceGraphic" operator="in" result="composite1"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.6"/>
<feOffset dx="1.6" dy="1.4" result="offset"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.3"/>
<feOffset dx="1" dy="1" result="offset"/>
<feComposite in="SourceGraphic" in2="offset" result="composite2"/>
</filter>
</defs>

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<linearGradient id="linearGradient2081-9" x1="10720" x2="10722" y1="-8163.6" y2="-8025.3" gradientTransform="matrix(.26671 0 0 .26515 -2835.2 2171.3)" gradientUnits="userSpaceOnUse">
<linearGradient id="linearGradient2081-9" x1="10653" x2="10795" y1="-8094.7" y2="-8094.7" gradientTransform="matrix(.26671 0 0 .26515 -2835.2 2171.3)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" offset="0"/>
<stop stop-color="#e6e6e6" offset="1"/>
</linearGradient>
<filter id="filter847" color-interpolation-filters="sRGB">
<feFlood flood-color="rgb(0,0,0)" flood-opacity=".49804" result="flood"/>
<feComposite in="flood" in2="SourceGraphic" operator="in" result="composite1"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.6"/>
<feOffset dx="1.6" dy="1.4" result="offset"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.3"/>
<feOffset dx="1" dy="1" result="offset"/>
<feComposite in="SourceGraphic" in2="offset" result="composite2"/>
</filter>
</defs>

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<linearGradient id="linearGradient3009-3" x1="4181.6" x2="4181.6" y1="-2618.6" y2="-2496.2" gradientTransform="matrix(.27677 0 0 .27555 -1132.3 731.96)" gradientUnits="userSpaceOnUse">
<linearGradient id="linearGradient3009-3" x1="4127.3" x2="4235.7" y1="-2558.4" y2="-2558.4" gradientTransform="matrix(.27677 0 0 .27555 -1132.3 731.96)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" offset="0"/>
<stop stop-color="#e6e6e6" offset="1"/>
</linearGradient>
<filter id="filter834" color-interpolation-filters="sRGB">
<feFlood flood-color="rgb(0,0,0)" flood-opacity=".49804" result="flood"/>
<feComposite in="flood" in2="SourceGraphic" operator="in" result="composite1"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.6"/>
<feOffset dx="1.6" dy="1.4" result="offset"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.3"/>
<feOffset dx="1" dy="1" result="offset"/>
<feComposite in="SourceGraphic" in2="offset" result="composite2"/>
</filter>
</defs>

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<linearGradient id="linearGradient8602-3" x1="-51.163" x2="-51.157" y1="-101.39" y2="-64.739" gradientTransform="matrix(.97643 0 0 .99287 74.952 107.73)" gradientUnits="userSpaceOnUse">
<linearGradient id="linearGradient8602-3" x1="-71.638" x2="-30.679" y1="-83.324" y2="-83.324" gradientTransform="matrix(.97643 0 0 .99287 74.952 107.73)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" offset="0"/>
<stop stop-color="#e6e6e6" offset="1"/>
</linearGradient>
@ -11,8 +11,8 @@
<filter id="filter839" color-interpolation-filters="sRGB">
<feFlood flood-color="rgb(0,0,0)" flood-opacity=".49804" result="flood"/>
<feComposite in="flood" in2="SourceGraphic" operator="in" result="composite1"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.6"/>
<feOffset dx="1.6" dy="1.4" result="offset"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.3"/>
<feOffset dx="1" dy="1" result="offset"/>
<feComposite in="SourceGraphic" in2="offset" result="composite2"/>
</filter>
</defs>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<linearGradient id="linearGradient2999-0" x1="4548" x2="4548" y1="-638.77" y2="-506.05" gradientTransform="matrix(.34208 0 0 .2837 -1530.8 187.39)" gradientUnits="userSpaceOnUse">
<linearGradient id="linearGradient2999-0" x1="4501.5" x2="4594.6" y1="-572.4" y2="-572.4" gradientTransform="matrix(.34208 0 0 .2837 -1530.8 187.39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" offset="0"/>
<stop stop-color="#e6e6e6" offset="1"/>
</linearGradient>
<filter id="filter840" color-interpolation-filters="sRGB">
<feFlood flood-color="rgb(0,0,0)" flood-opacity=".49804" result="flood"/>
<feComposite in="flood" in2="SourceGraphic" operator="in" result="composite1"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.6"/>
<feOffset dx="1.6" dy="1.4" result="offset"/>
<feGaussianBlur in="composite1" result="blur" stdDeviation="0.3"/>
<feOffset dx="1" dy="1" result="offset"/>
<feComposite in="SourceGraphic" in2="offset" result="composite2"/>
</filter>
</defs>

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient1849-1" x1="3341.2" x2="3366.2" y1="-469.28" y2="-469.28" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2250"/>
<linearGradient id="linearGradient2250">
<stop stop-color="#796c60" offset="0"/>
<stop stop-color="#4b403b" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient2214" x1="-177.63" x2="-151.24" y1="156.68" y2="156.68" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2250"/>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
@ -9,19 +17,20 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(145.66 -116.03)" clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<g transform="matrix(1.019 0 0 1.0751 -145.94 117.78)" image-rendering="optimizeQuality" stroke-width="1.051">
<g transform="translate(-3328.6,431.72)" stroke-width="1.051">
<g transform="translate(-.16005 57.079)">
<path d="m3355.4-482.96c-1.4798-1.2669-9.3826-1.0443-4.5815 5.4502-9.7126 9.8598-11.043 15.278-6.0788 22.513h17.654c5.9714-6.4296 2.5115-13.501-4.7322-20.742-2.8292 3.8312-2.6936 6.8371-3.3534 10.353l-4.5916-0.0661c-0.6465-5.5861 7.9994-14.082 5.6832-17.508z" fill="#5c5248" stroke="#1e1e1e" stroke-linejoin="round" stroke-width="1.9108"/>
<path d="m3353.5-483.49c-0.6135 0.019-0.2032 0.18307-0.757 0.52814 0 2e-3 0.01 5e-3 0.01 7e-3 3.5149-0.2893-2.3242 10.95-3.3306 17.574 0.526-2.8034 1.2999-5.2837 3.0247-8.1153 1.9659-4.0477 4.1574-8.075 2.9517-9.4588-0.4037-0.35422-1.1231-0.5593-1.8981-0.53536zm4.1601 7.7561c-0.5882 0.79635-0.5061 0.62296-0.9528 1.36 5.8921 5.6259 8.5651 12.824 3.0387 19.382h2.6464c5.9714-6.4296 2.5112-13.501-4.7323-20.742z" opacity=".35"/>
<g transform="translate(.0034433 .19601)" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision">
<g transform="translate(145.66,-116.03)" clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<g transform="matrix(1.019,0,0,1.0751,-145.94,117.78)" image-rendering="optimizeQuality" stroke-width="1.051">
<g transform="translate(-3328.6,431.72)" stroke-width="1.051">
<g transform="translate(-.16005 57.079)">
<path d="m3355.4-482.96c-5.6887-2.1379-6.8229 2.3498-4.5815 5.4502-9.7126 9.8598-11.043 15.278-6.0788 22.513h17.654c5.9714-6.4296 2.5115-13.501-4.7322-20.742-2.8292 3.8312-3.2129 6.8371-3.8727 10.353l-3.553-0.0661c-0.6465-5.5861 7.4801-14.082 5.1639-17.508z" fill="url(#linearGradient1849-1)" stroke="#1e1e1e" stroke-linejoin="round" stroke-width="1.5287"/>
<path d="m3353.5-483.49c-0.6135 0.019-0.2032 0.18307-0.757 0.52814 0 2e-3 0.01 5e-3 0.01 7e-3 3.5149-0.2893-2.3242 10.95-3.3306 17.574 0.526-2.8034 1.2999-5.2837 3.0247-8.1153 1.9659-4.0477 4.1574-8.075 2.9517-9.4588-0.4037-0.35422-1.1231-0.5593-1.8981-0.53536zm4.1601 7.7561c-0.5882 0.79635-0.5061 0.62296-0.9528 1.36 5.8921 5.6259 8.5651 12.824 3.0387 19.382h2.6464c5.9714-6.4296 2.5112-13.501-4.7323-20.742z" opacity=".3"/>
</g>
</g>
<g transform="translate(45.326,57.079)"></g>
</g>
</g>
<g transform="matrix(1.1509 0 0 1.1499 68.581 -23.091)" stroke-width=".95621">
<path d="m-174.65 154.11c-1.2484 0-2.2826 1.0579-2.2826 2.3347v0.47387l0.0109 2.3347h24.98l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347h-10.218z" fill="#5c5248" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7386"/>
<path d="m-158.44 154.11c1.2484 0 2.2826 1.0579 2.2826 2.3347v0.47387l-0.0109 2.3347h4.2333l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347z" image-rendering="optimizeQuality" opacity=".35"/>
<g transform="matrix(1.1509,0,0,1.1499,68.581,-23.091)" stroke-width=".95621">
<path d="m-174.65 154.11c-1.2484 0-2.2826 1.0579-2.2826 2.3347v0.47387l0.0109 2.3347h24.98l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347h-10.218z" fill="url(#linearGradient2214)" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.3908"/>
<path d="m-158.44 154.11c1.2484 0 2.2826 1.0579 2.2826 2.3347v0.47387l-0.0109 2.3347h4.2333l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347z" image-rendering="optimizeQuality" opacity=".3"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient1889-2" x1="-825.75" x2="-704.44" y1="2712.8" y2="2712.8" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2250"/>
<linearGradient id="linearGradient2250">
<stop stop-color="#796c60" offset="0"/>
<stop stop-color="#4b403b" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient2238" x1="-215.24" x2="-184.86" y1="731.78" y2="731.78" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2250"/>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
@ -9,18 +17,20 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(225.05 -690.73)" clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<g transform="matrix(1 0 0 .95836 -225.04 692.31)" image-rendering="optimizeQuality" stroke-width="1.0215">
<g transform="translate(221.07,-170.56)" stroke-width="1.0215">
<g transform="matrix(1.0676,0,0,1.0981,73.872,422.19)" stroke-width=".94346">
<g fill="#e7d6c3" stroke="#3c3c3c" stroke-linejoin="round">
<path transform="matrix(.24783 0 0 .24095 -63.248 -864.21)" d="m-765.07 2646c-6.8133 0.3934-12.199 4.8659-12.201 10.326 0 2.2289 0.92414 4.3963 2.6191 6.1817h-19.791v20.135h21.832l-9.8652 11.173 10.104 8.5455c-21.106 1.4304-45.434 8.5661-49.715 17.852-4.794 10.402 23.49 59.432 23.49 59.432h67.01s28.284-49.031 23.49-59.432c-4.2847-9.2971-28.703-16.442-49.811-17.858l10.242-8.5396-9.8652-11.173h21.832v-20.135h-19.791c1.695-1.7854 2.6191-3.9529 2.6191-6.1817-2e-3 -5.4602-5.3859-9.9328-12.199-10.326z" fill="#5c5248" fill-rule="evenodd" stroke="#1e1e1e" stroke-width="7.7217" style="paint-order:fill markers stroke"/>
<g transform="translate(.0021623 .1957)" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision">
<g transform="translate(225.05,-690.73)" clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<g transform="matrix(1 0 0 .95836 -225.04 692.31)" image-rendering="optimizeQuality" stroke-width="1.0215">
<g transform="translate(221.07,-170.56)" stroke-width="1.0215">
<g transform="matrix(1.0676,0,0,1.0981,73.872,422.19)" stroke-width=".94346">
<g fill="#e7d6c3" stroke="#3c3c3c" stroke-linejoin="round">
<path transform="matrix(.24783 0 0 .24095 -63.248 -864.21)" d="m-765.07 2643.9c-6.8133 0.3934-12.199 4.8659-12.201 10.326 0 2.2289 0.92414 6.4832 2.6191 8.2686h-21.791v20.135h23.832l-9.8652 11.173 10.104 8.5455c-21.106 1.4304-45.434 6.4792-49.715 15.765-4.794 10.402 23.49 61.519 23.49 61.519h67.01s28.284-51.118 23.49-61.519c-4.2847-9.2971-28.703-14.355-49.811-15.771l10.242-8.5396-9.8652-11.173h23.832v-20.135h-21.791c1.695-1.7854 2.6191-6.0398 2.6191-8.2686-2e-3 -5.4602-5.3859-9.9328-12.199-10.326z" fill="url(#linearGradient1889-2)" fill-rule="evenodd" stroke="#1e1e1e" stroke-width="6.1772" style="paint-order:fill markers stroke"/>
</g>
<path d="m-246.97-194.46 2.4099-5e-3s7.0088-11.809 5.8207-14.315c-3.8738-3.6336-12.345-4.2995-12.345-4.2995 10.35 2.6812 11.819 4.7779 4.1146 18.62z" opacity=".3"/>
</g>
<path d="m-247.15-212.59c0.44806 0 10.987-0.60787 0.18427 18.132l2.4099-5e-3s7.0088-11.809 5.8207-14.315c-3.8738-3.6336-8.4149-3.8116-8.4149-3.8116z" opacity=".3"/>
</g>
</g>
<path d="m-211.81 728.82c-1.4368 0-2.627 1.2165-2.627 2.6847v0.5449l0.0126 2.6847h28.749l0.0125-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847h-11.76z" fill="url(#linearGradient2238)" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m-193.15 728.82c1.4368 0 2.627 1.2165 2.627 2.6847v0.5449l-0.0125 2.6847h4.8721l0.0125-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
</g>
<path d="m-211.81 728.82c-1.4368 0-2.627 1.2165-2.627 2.6847v0.5449l0.0126 2.6847h28.749l0.0125-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847h-11.76z" fill="#5c5248" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.0001"/>
<path d="m-193.15 728.82c1.4368 0 2.627 1.2165 2.627 2.6847v0.5449l-0.0125 2.6847h4.8721l0.0125-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient1861-4" x1="3295.1" x2="3321.5" y1="-411.88" y2="-411.88" gradientTransform="matrix(1.0621 0 0 1.0589 -3487.5 459.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2250"/>
<linearGradient id="linearGradient2250">
<stop stop-color="#796c60" offset="0"/>
<stop stop-color="#4b403b" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient2216" x1="-177.63" x2="-151.24" y1="156.68" y2="156.68" gradientTransform="matrix(1.1509 0 0 1.1499 214.24 -138.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2250"/>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
@ -9,17 +17,10 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(105.81 -172.94)" clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<g transform="matrix(1.0621 0 0 1.0589 -106.38 175.23)" image-rendering="optimizeQuality" stroke-width="1.0372">
<g transform="translate(-3283.1,431.72)" stroke-width="1.0372">
<path class="st28" d="m3308.1-411.83-10.914 1.0362-1.3689-4.9258 13.622-6.4357 1.6596-3.6844 9.6048 11.231c0 7e-5 -3.8757 16.695-3.8757 16.695l-19.317-3e-5c0.2301-10.664 9.0752-7.6496 10.589-13.916z" fill="#5c5248" stroke="#1e1e1e" stroke-linejoin="round" stroke-width="1.8859"/>
<path d="m3311.1-425.83-0.8274 1.836 0.4011-0.89027c2.5347 3.5154 5.2798 6.8738 7.9555 10.282l-4.976 16.688h3.1755s3.8748-16.684 3.8759-16.688z" opacity=".35"/>
<g transform="translate(-.15945 57.079)" stroke-width="1.0372"></g>
</g>
</g>
<g transform="matrix(1.1509 0 0 1.1499 108.43 33.821)" stroke-width=".95621">
<path d="m-174.65 154.11c-1.2484 0-2.2826 1.0579-2.2826 2.3347v0.47387l0.0109 2.3347h24.98l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347h-10.218z" fill="#5c5248" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7386"/>
<path d="m-158.44 154.11c1.2484 0 2.2826 1.0579 2.2826 2.3347v0.47387l-0.0109 2.3347h4.2333l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347z" image-rendering="optimizeQuality" opacity=".35"/>
</g>
<g clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<path class="st28" d="m25.987 23.546-11.592 1.0972-1.4539-5.2159 14.468-6.8148 1.7627-3.9014 10.201 11.893c0 7.4e-5 -4.1164 17.678-4.1164 17.678l-20.517-3.2e-5c0.24439-11.292 9.6388-8.1002 11.247-14.736z" fill="url(#linearGradient1861-4)" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m29.173 8.7209-0.87878 1.9441 0.42601-0.94271c2.6921 3.7225 5.6077 7.2787 8.4495 10.888l-5.285 17.671h3.3727s4.1154-17.667 4.1166-17.671z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.0999"/>
<path d="m13.24 38.286c-1.4368 0-2.627 1.2165-2.627 2.6847v0.5449l0.01254 2.6847h28.749l0.01254-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847h-11.76z" fill="url(#linearGradient2216)" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m31.896 38.286c1.4368 0 2.627 1.2165 2.627 2.6847v0.5449l-0.01254 2.6847h4.8721l0.01255-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient1835-4" x1="274.13" x2="353.17" y1="488.65" y2="488.65" gradientTransform="matrix(.29151 0 0 .29096 -66.426 -117.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2250"/>
<linearGradient id="linearGradient2250">
<stop stop-color="#796c60" offset="0"/>
<stop stop-color="#4b403b" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient1833-8" x1="-177.8" x2="-151.06" y1="156.68" y2="156.68" gradientTransform="matrix(1.1509 0 0 1.1499 214.24 -138.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2250"/>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
@ -9,14 +17,10 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(65.065 -116.97)" clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<g transform="matrix(1.1018 0 0 1.0997 -131.5 -.6216)" stroke-width=".99932">
<path transform="scale(.26458)" d="m313.65 442.25c-12.632 3.8e-4 -22.873 8.9325-22.873 19.953 0 5.7313 2.8356 11.185 7.7695 14.969h-5.9102c-4.6556 0-8.5098 3.289-8.5098 7.2578v1.4727c0 3.9686 3.8542 7.2578 8.5098 7.2578h8.4297c-0.41158 20.368-23.501 25.607-23.501 41.896l36.083-0.0273h2e-3l36.083 0.0273c0-16.289-23.089-21.529-23.501-41.896h8.4316c4.6556 0 8.5098-3.2892 8.5098-7.2578v-1.4727c0-3.9688-3.8542-7.2578-8.5098-7.2578h-5.9102c4.9339-3.7842 7.7695-9.2374 7.7695-14.969 0-11.021-10.241-19.953-22.873-19.953z" fill="#5c5248" image-rendering="optimizeQuality" stroke="#1e1d1d" stroke-linejoin="round" stroke-width="6.8672"/>
<path d="m82.987 117.01c-0.48926 3e-5 -0.96467 0.0519-1.4205 0.14762 5.8735 0.61613 7.204 5.755 4.6156 8.2086-1.8918 1.5046-7.1912 0.88385-7.1912 0.88385 2.403 0.39363 4.6642 1.7387 6.806 2.2138-4.0398 6.3235 2.9682 6.8855 2.9682 13.098l3.7692 3e-3c0.32759-4.4148-5.9754-5.6962-6.2179-11.085h2.2306c1.232 0 2.2514-0.86993 2.2514-1.9199v-0.38962c0-1.05-1.0194-1.9204-2.2514-1.9204h-1.5638c1.3055-1.0012 2.0561-2.4439 2.0558-3.9602 0-2.9158-2.7096-5.2794-6.0517-5.2794z" image-rendering="optimizeQuality" opacity=".35"/>
</g>
<g transform="matrix(1.1509 0 0 1.1499 149.17 -22.153)" stroke-width=".95621">
<path d="m-174.65 154.11c-1.2484 0-2.2826 1.0579-2.2826 2.3347v0.47387l0.0109 2.3347h24.98l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347h-10.218z" fill="#5c5248" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7386"/>
<path d="m-158.44 154.11c1.2484 0 2.2826 1.0579 2.2826 2.3347v0.47387l-0.0109 2.3347h4.2333l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347z" image-rendering="optimizeQuality" opacity=".35"/>
</g>
<g clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<path d="m25.008 11.282c-3.6824 1.11e-4 -6.6678 2.599-6.6678 5.8055 0 1.6676 0.82662 3.2544 2.2649 4.3554h-1.7229c-1.3572 0-2.4807 0.95696-2.4807 2.1117v0.4285c0 1.1547 1.1236 2.1117 2.4807 2.1117h2.4574c-0.11998 5.9262-6.8509 7.4506-6.8509 12.19l10.519-0.0079h5.83e-4l10.519 0.0079c0-4.7394-6.7308-6.264-6.8509-12.19h2.4579c1.3572 0 2.4807-0.95702 2.4807-2.1117v-0.4285c0-1.1548-1.1236-2.1117-2.4807-2.1117h-1.7229c1.4383-1.101 2.2649-2.6877 2.2649-4.3554 0-3.2067-2.9854-5.8055-6.6678-5.8055z" fill="url(#linearGradient1835-4)" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m25.01 11.282c-0.53907 3.3e-5 -1.0629 0.05707-1.5651 0.16234 6.4714 0.67756 7.9374 6.3288 5.0855 9.027-2.0844 1.6546-7.9233 0.97197-7.9233 0.97197 2.6476 0.43288 5.139 1.912 7.4988 2.4345-4.4511 6.954 3.2704 7.572 3.2704 14.404l4.1529 0.0033c0.36094-4.855-6.5837-6.2641-6.8509-12.19h2.4577c1.3574 0 2.4806-0.95666 2.4806-2.1113v-0.42846c0-1.1547-1.1232-2.1119-2.4806-2.1119h-1.723c1.4384-1.101 2.2654-2.6876 2.2651-4.355 0-3.2065-2.9854-5.8058-6.6678-5.8058z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
<path d="m13.24 38.286c-1.4368 0-2.627 1.2165-2.627 2.6847v0.5449l0.01254 2.6847h28.749l0.01254-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847h-11.76z" fill="url(#linearGradient1833-8)" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m31.896 38.286c1.4368 0 2.627 1.2165 2.627 2.6847v0.5449l-0.01254 2.6847h4.8721l0.01255-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient1879-0" x1="-647.27" x2="-525.69" y1="418.44" y2="418.44" gradientTransform="matrix(.31419 0 0 .31419 209.27 -109.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2250"/>
<linearGradient id="linearGradient2250">
<stop stop-color="#796c60" offset="0"/>
<stop stop-color="#4b403b" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient1881-2" x1="-177.63" x2="-151.24" y1="156.68" y2="156.68" gradientTransform="matrix(1.1509 0 0 1.1499 214.23 -138.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2250"/>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
@ -9,14 +17,10 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(186.22 -115.98)" clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<g transform="matrix(1.1875 0 0 1.1875 23.048 6.5116)" stroke-width=".9263">
<path transform="scale(.26458)" d="m-586.48 367.27c-8.3875 7e-4 -15.186 6.6771-15.186 14.912 5e-3 5.9041 3.5581 11.249 9.0606 13.631-1.175 7.2779-4.806 24.057-14.896 25.491-7.4954 1.0649-12.269-4.0964-15.531-10.006 3.5268-2.519 5.6161-6.5403 5.623-10.822 4.3e-4 -7.4063-6.1148-13.41-13.658-13.41-7.5434-2.7e-4 -13.659 6.0039-13.658 13.41 4e-3 6.8197 5.221 12.55 12.123 13.316l15.828 55.826h60.588l15.83-55.826c6.9012-0.7672 12.117-6.4974 12.121-13.316 4.3e-4 -7.4063-6.1148-13.41-13.658-13.41-7.5427 7.9e-4 -13.657 6.0046-13.656 13.41 6e-3 4.2816 2.0951 8.3028 5.6211 10.822-3.2623 5.91-8.0358 11.071-15.531 10.006-10.09-1.4339-13.721-18.213-14.896-25.491 5.5025-2.3817 9.0554-7.7267 9.0606-13.631 7.8e-4 -8.2343-6.7968-14.91-15.184-14.912z" fill="#5c5248" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linejoin="round" stroke-width="6.3654"/>
<path d="m-143.38 102.41c-0.45175 1e-3 -0.89925 0.0858-1.3193 0.24908 3.9923 1.4135 3.2642 5.7306 0.49762 6.1609l-5.5195 15.432h2.6458l4.1021-14.771c1.826-0.20299 3.206-1.7191 3.207-3.5233 1.1e-4 -1.9596-1.6179-3.5482-3.6137-3.5481z" image-rendering="optimizeQuality" opacity=".35"/>
</g>
<g transform="matrix(1.1509 0 0 1.1499 28.014 -23.144)" stroke-width=".95621">
<path d="m-174.65 154.11c-1.2484 0-2.2826 1.0579-2.2826 2.3347v0.47387l0.0109 2.3347h24.98l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347h-10.218z" fill="#5c5248" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7386"/>
<path d="m-158.44 154.11c1.2484 0 2.2826 1.0579 2.2826 2.3347v0.47387l-0.0109 2.3347h4.2333l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347z" image-rendering="optimizeQuality" opacity=".35"/>
</g>
<g clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<path d="m25 6.1221c-2.6353 2.199e-4 -4.7713 2.0979-4.7713 4.6852 0.0016 1.855 1.1179 3.5343 2.8467 4.2827-0.36917 2.2866-1.51 7.5584-4.6802 8.009-2.355 0.33458-3.8548-1.287-4.8797-3.1438 1.1081-0.79144 1.7645-2.0549 1.7667-3.4002 1.35e-4 -2.327-1.9212-4.2133-4.2912-4.2133-2.3701-8.5e-5 -4.2915 1.8864-4.2912 4.2133 0.00126 2.1427 1.6404 3.9431 3.8089 4.1837l4.973 17.54h19.036l4.9736-17.54c2.1683-0.24104 3.807-2.0414 3.8083-4.1837 1.35e-4 -2.327-1.9212-4.2133-4.2912-4.2133-2.3698 2.48e-4 -4.2909 1.8866-4.2906 4.2133 0.0019 1.3452 0.65826 2.6086 1.7661 3.4002-1.025 1.8569-2.5248 3.4784-4.8797 3.1438-3.1702-0.45052-4.311-5.7223-4.6802-8.009 1.7288-0.7483 2.8451-2.4276 2.8467-4.2827 2.45e-4 -2.5871-2.1355-4.6846-4.7706-4.6852z" fill="url(#linearGradient1879-0)" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m39.002 12.342c-0.53645 0.0012-1.0679 0.10189-1.5667 0.29578 4.7409 1.6785 3.8762 6.8051 0.59092 7.3161l-7.6127 18.326h4.2002l4.8712-17.541c2.1684-0.24105 3.8071-2.0414 3.8083-4.1839 1.3e-4 -2.327-1.9213-4.2135-4.2913-4.2134z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
<path d="m13.227 38.286c-1.4368 0-2.627 1.2165-2.627 2.6847v0.5449l0.01254 2.6847h28.749l0.01254-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847h-11.76z" fill="url(#linearGradient1881-2)" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m31.883 38.286c1.4368 0 2.627 1.2165 2.627 2.6847v0.5449l-0.01254 2.6847h4.8721l0.01254-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient1871-6" x1="12797" x2="12909" y1="-1764.6" y2="-1764.6" gradientTransform="matrix(.23554 0 0 .26678 -3002.1 494.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2250"/>
<linearGradient id="linearGradient2250">
<stop stop-color="#796c60" offset="0"/>
<stop stop-color="#4b403b" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient1869-2" x1="-252.72" x2="-222.34" y1="157.62" y2="157.62" gradientTransform="translate(262.53 -116.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2250"/>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
@ -17,17 +25,10 @@
</cc:License>
</rdf:RDF>
</metadata>
<g transform="translate(262.53 -116.57)" clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<g transform="matrix(.89025 0 0 1.044 -3267.3 568.27)" image-rendering="optimizeQuality" stroke-width="1.141">
<g>
<g transform="matrix(1 0 0 .96581 3.0149 40.728)" stroke-width="1.161">
<path transform="scale(.26458)" d="m12800-1819.4v30.107c0 12.836 27.727 14.826 27.727 14.826-1.5 38.751-21.385 64.766-21.385 64.766l90.971-0.1543s-19.745-26.004-21.23-64.611c0 0 29.28-1.9905 29.28-14.826v-30.107h-20.037s1.946 8.844-1.995 12.809c-4.396 4.4228-10.269 4.4228-14.666 0-3.94-3.9646-1.992-12.809-1.992-12.809h-27.982s1.948 8.844-1.992 12.809c-4.764 4.7917-11.46 4.7917-16.223 0-3.941-3.9646-1.992-12.809-1.992-12.809z" fill="#5c5248" stroke="#1e1e1e" stroke-linejoin="round" stroke-width="7.9784"/>
<path transform="scale(.26458)" d="m12892-1819.4 0.06 29.798c-0.384 4.0517-10.418 9.1982-16.977 9.5002l-66.004 0.057c-1.013 0.9502 10.595 4.8318 15.669 5.5772l37.383 4.9066c-2.234 24.91 22.109 59.78 22.086 59.703h12.608s-19.745-26.003-21.23-64.611c10.814-1.5517 12.542-3.1876 17.14-4.1537h0.08l-0.01-0.014c4.343-0.9285 11.925-5.4062 12.065-10.658v-30.107z" opacity=".33"/>
</g>
<g transform="translate(95.046,56.285)" stroke-width="1.141"></g>
</g>
</g>
<path d="m-249.29 154.66c-1.4368 0-2.627 1.2164-2.627 2.6846v0.54488l0.0126 2.6846h28.75l0.0125-2.6846v-0.54488c0-1.4682-1.1902-2.6846-2.627-2.6846h-11.76z" fill="#5c5248" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
<path d="m-230.64 154.66c1.4368 0 2.627 1.2164 2.627 2.6846v0.54488l-0.0125 2.6846h4.8721l0.0125-2.6846v-0.54488c0-1.4682-1.1902-2.6846-2.627-2.6846z" image-rendering="optimizeQuality" opacity=".33"/>
<g clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<path d="m12.855 9.041v8.0319c0 3.4244 6.5309 3.9552 6.5309 3.9552l-3.9788 17.278 19.311-0.041163-3.9423-17.237s6.8967-0.53102 6.8967-3.9552v-8.0319h-4.7196s0.45836 2.3594-0.46991 3.4172c-1.0354 1.1799-2.4188 1.1799-3.4545 0-0.92804-1.0577-0.4692-3.4172-0.4692-3.4172h-6.5909s0.45884 2.3594-0.4692 3.4172c-1.1221 1.2783-2.6993 1.2783-3.8212 0-0.92827-1.0577-0.4692-3.4172-0.4692-3.4172z" fill="url(#linearGradient1871-6)" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m34.525 9.041 0.01413 7.9494c-0.09045 1.0809-2.4539 2.4539-3.9988 2.5344l-15.547 0.01521c-0.2386 0.25349 2.4956 1.289 3.6907 1.4879 12.83-0.72876 10.438 3.6556 12.949 17.236h3.0847c0 2.14e-4 -1.7152-6.3944-4.0572-17.237 2.5472-0.41396 2.9542-0.85038 4.0372-1.1081h0.01884l-0.0024-0.0037c1.023-0.2477 2.8088-1.4423 2.8418-2.8433v-8.0319z" image-rendering="optimizeQuality" opacity=".33" stroke-width=".29103"/>
<path d="m13.239 38.286c-1.4368 0-2.627 1.2164-2.627 2.6846v0.54488l0.0126 2.6846h28.75l0.0125-2.6846v-0.54488c0-1.4682-1.1902-2.6846-2.627-2.6846h-11.76z" fill="url(#linearGradient1869-2)" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m31.889 38.286c1.4368 0 2.627 1.2164 2.627 2.6846v0.54488l-0.0125 2.6846h4.8721l0.0125-2.6846v-0.54488c0-1.4682-1.1902-2.6846-2.627-2.6846z" image-rendering="optimizeQuality" opacity=".33"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient1849" x1="3341.2" x2="3366.2" y1="-469.28" y2="-469.28" gradientTransform="matrix(1.019 0 0 1.0751 -3392.3 527.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2244"/>
<linearGradient id="linearGradient2244">
<stop stop-color="#f2e7da" offset="0"/>
<stop stop-color="#bba38a" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient1851" x1="-177.63" x2="-151.24" y1="156.68" y2="156.68" gradientTransform="matrix(1.1509 0 0 1.1499 214.24 -138.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2244"/>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
@ -9,19 +17,10 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(145.66 -116.03)" clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<g transform="matrix(1.019 0 0 1.0751 -145.94 117.78)" image-rendering="optimizeQuality" stroke-width="1.051">
<g transform="translate(-3328.6,431.72)" stroke-width="1.051">
<g transform="translate(-.16005 57.079)">
<path d="m3355.4-482.96c-1.4798-1.2669-9.3826-1.0443-4.5815 5.4502-9.7126 9.8598-11.043 15.278-6.0788 22.513h17.654c5.9714-6.4296 2.5115-13.501-4.7322-20.742-2.8292 3.8312-2.6936 6.8371-3.3534 10.353l-4.5916-0.0661c-0.6465-5.5861 7.9994-14.082 5.6832-17.508z" fill="#f2e7da" stroke="#323232" stroke-linejoin="round" stroke-width="1.9108"/>
<path d="m3353.5-483.49c-0.6135 0.019-0.2032 0.18307-0.757 0.52814 0 2e-3 0.01 5e-3 0.01 7e-3 3.5149-0.2893-2.3242 10.95-3.3306 17.574 0.526-2.8034 1.2999-5.2837 3.0247-8.1153 1.9659-4.0477 4.1574-8.075 2.9517-9.4588-0.4037-0.35422-1.1231-0.5593-1.8981-0.53536zm4.1601 7.7561c-0.5882 0.79635-0.5061 0.62296-0.9528 1.36 5.8921 5.6259 8.5651 12.824 3.0387 19.382h2.6464c5.9714-6.4296 2.5112-13.501-4.7323-20.742z" opacity=".3"/>
</g>
<g transform="translate(45.326,57.079)"></g>
</g>
</g>
<g transform="matrix(1.1509 0 0 1.1499 68.581 -23.091)" stroke-width=".95621">
<path d="m-174.65 154.11c-1.2484 0-2.2826 1.0579-2.2826 2.3347v0.47387l0.0109 2.3347h24.98l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347h-10.218z" fill="#f2e7da" image-rendering="optimizeQuality" stroke="#323232" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7386"/>
<path d="m-158.44 154.11c1.2484 0 2.2826 1.0579 2.2826 2.3347v0.47387l-0.0109 2.3347h4.2333l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347z" image-rendering="optimizeQuality" opacity=".3"/>
</g>
<g clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<path d="m26.87 8.2235c-5.7968-2.2985-6.9525 2.5263-4.6685 5.8595-9.8971 10.6-11.253 16.425-6.1943 24.204h17.989c6.0849-6.9125 2.5592-14.515-4.8221-22.3-2.883 4.1189-3.2739 7.3506-3.9463 11.131l-3.6205-0.071064c-0.65878-6.0056 7.6222-15.14 5.262-18.823z" fill="url(#linearGradient1849)" image-rendering="optimizeQuality" stroke="#323232" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m24.933 7.6537c-0.62516 0.020427-0.20706 0.19682-0.77138 0.5678 0 0.00215 0.01019 0.00538 0.01019 0.00753 3.5817-0.31103-2.3684 11.772-3.3939 18.894 0.53599-3.0139 1.3246-5.6805 3.0822-8.7248 2.0033-4.3517 4.2364-8.6814 3.0078-10.169-0.41137-0.38082-1.1444-0.6013-1.9342-0.57557zm4.2391 8.3386c-0.59938 0.85616-0.51572 0.66974-0.9709 1.4621 6.004 6.0484 8.7278 13.787 3.0964 20.838h2.6967c6.0849-6.9125 2.5589-14.515-4.8222-22.3z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1001"/>
<path d="m13.24 38.286c-1.4368 0-2.627 1.2165-2.627 2.6847v0.5449l0.01254 2.6847h28.749l0.01254-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847h-11.76z" fill="url(#linearGradient1851)" image-rendering="optimizeQuality" stroke="#323232" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m31.896 38.286c1.4368 0 2.627 1.2165 2.627 2.6847v0.5449l-0.01254 2.6847h4.8721l0.01255-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient1889" x1="-825.75" x2="-704.44" y1="2712.8" y2="2712.8" gradientTransform="matrix(.26458 0 0 .25357 227.43 -666.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2244"/>
<linearGradient id="linearGradient2244">
<stop stop-color="#f2e7da" offset="0"/>
<stop stop-color="#bba38a" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient1891" x1="-215.24" x2="-184.86" y1="731.78" y2="731.78" gradientTransform="translate(225.05 -690.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2244"/>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
@ -9,18 +17,10 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(225.05 -690.73)" clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<g transform="matrix(1 0 0 .95836 -225.04 692.31)" image-rendering="optimizeQuality" stroke-width="1.0215">
<g transform="translate(221.07,-170.56)" stroke-width="1.0215">
<g transform="matrix(1.0676,0,0,1.0981,73.872,422.19)" stroke-width=".94346">
<g fill="#e7d6c3" stroke="#3c3c3c" stroke-linejoin="round">
<path transform="matrix(.24783 0 0 .24095 -63.248 -864.21)" d="m-765.07 2646c-6.8133 0.3934-12.199 4.8659-12.201 10.326 0 2.2289 0.92414 4.3963 2.6191 6.1817h-19.791v20.135h21.832l-9.8652 11.173 10.104 8.5455c-21.106 1.4304-45.434 8.5661-49.715 17.852-4.794 10.402 23.49 59.432 23.49 59.432h67.01s28.284-49.031 23.49-59.432c-4.2847-9.2971-28.703-16.442-49.811-17.858l10.242-8.5396-9.8652-11.173h21.832v-20.135h-19.791c1.695-1.7854 2.6191-3.9529 2.6191-6.1817-2e-3 -5.4602-5.3859-9.9328-12.199-10.326z" fill="#f2e7da" fill-rule="evenodd" stroke="#323232" stroke-width="7.7217" style="paint-order:fill markers stroke"/>
</g>
<path d="m-247.15-212.59c0.44806 0 10.987-0.60787 0.18427 18.132l2.4099-5e-3s7.0088-11.809 5.8207-14.315c-3.8738-3.6336-8.4149-3.8116-8.4149-3.8116z" opacity=".3"/>
</g>
</g>
</g>
<path d="m-211.81 728.82c-1.4368 0-2.627 1.2165-2.627 2.6847v0.5449l0.0126 2.6847h28.749l0.0125-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847h-11.76z" fill="#f2e7da" image-rendering="optimizeQuality" stroke="#323232" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.0001"/>
<path d="m-193.15 728.82c1.4368 0 2.627 1.2165 2.627 2.6847v0.5449l-0.0125 2.6847h4.8721l0.0125-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
<g clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<path d="m25.006 3.8712c-1.8027 0.099754-3.2277 1.2338-3.2282 2.6184 0 0.56518 0.24451 1.6439 0.69297 2.0967h-5.7655v5.1056h6.3056l-2.6102 2.8331 2.6734 2.1669c-5.5843 0.36271-12.021 1.6429-13.154 3.9976-1.2684 2.6376 6.2151 15.599 6.2151 15.599h17.73s7.4835-12.962 6.2151-15.599c-1.1337-2.3575-7.5943-3.64-13.179-3.9991l2.7099-2.1654-2.6102-2.8331h6.3056v-5.1056h-5.7655c0.44847-0.45272 0.69297-1.5315 0.69297-2.0967-5.29e-4 -1.3845-1.425-2.5187-3.2277-2.6184z" fill="url(#linearGradient1889)" image-rendering="optimizeQuality" stroke="#323232" stroke-linejoin="round" stroke-width="1.6" style="paint-order:fill markers stroke"/>
<path d="m31.294 38.285 2.5728-0.0053s7.4826-12.427 6.2142-15.065c-4.1357-3.8239-13.18-4.5247-13.18-4.5247 11.05 2.8216 12.618 5.0281 4.3928 19.595z" image-rendering="optimizeQuality" opacity=".3"/>
<path d="m13.242 38.286c-1.4368 0-2.627 1.2165-2.627 2.6847v0.5449l0.0126 2.6847h28.749l0.0125-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847h-11.76z" fill="url(#linearGradient1891)" image-rendering="optimizeQuality" stroke="#323232" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m31.902 38.286c1.4368 0 2.627 1.2165 2.627 2.6847v0.5449l-0.0125 2.6847h4.8721l0.0125-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient1861" x1="3295.1" x2="3321.5" y1="-411.88" y2="-411.88" gradientTransform="matrix(1.0621 0 0 1.0589 -3487.5 459.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2244"/>
<linearGradient id="linearGradient2244">
<stop stop-color="#f2e7da" offset="0"/>
<stop stop-color="#bba38a" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient1859" x1="-177.63" x2="-151.24" y1="156.68" y2="156.68" gradientTransform="matrix(1.1509 0 0 1.1499 214.24 -138.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2244"/>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
@ -9,16 +17,10 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(105.81 -172.94)" clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<g transform="matrix(1.0621 0 0 1.0589 -106.38 175.23)" image-rendering="optimizeQuality" stroke-width="1.0372">
<g transform="translate(-3283.1,431.72)" stroke-width="1.0372">
<path class="st28" d="m3308.1-411.83-10.914 1.0362-1.3689-4.9258 13.622-6.4357 1.6596-3.6844 9.6048 11.231c0 7e-5 -3.8757 16.695-3.8757 16.695l-19.317-3e-5c0.2301-10.664 9.0752-7.6496 10.589-13.916z" fill="#f2e7da" stroke="#323232" stroke-linejoin="round" stroke-width="1.8859"/>
<path d="m3311.1-425.83-0.8274 1.836 0.4011-0.89027c2.5347 3.5154 5.2798 6.8738 7.9555 10.282l-4.976 16.688h3.1755s3.8748-16.684 3.8759-16.688z" opacity=".3"/>
</g>
</g>
<g transform="matrix(1.1509 0 0 1.1499 108.43 33.821)" stroke-width=".95621">
<path d="m-174.65 154.11c-1.2484 0-2.2826 1.0579-2.2826 2.3347v0.47387l0.0109 2.3347h24.98l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347h-10.218z" fill="#f2e7da" image-rendering="optimizeQuality" stroke="#323232" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7386"/>
<path d="m-158.44 154.11c1.2484 0 2.2826 1.0579 2.2826 2.3347v0.47387l-0.0109 2.3347h4.2333l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347z" image-rendering="optimizeQuality" opacity=".3"/>
</g>
<g clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<path class="st28" d="m25.987 23.546-11.592 1.0972-1.4539-5.2159 14.468-6.8148 1.7627-3.9014 10.201 11.893c0 7.4e-5 -4.1164 17.678-4.1164 17.678l-20.517-3.2e-5c0.24439-11.292 9.6388-8.1002 11.247-14.736z" fill="url(#linearGradient1861)" image-rendering="optimizeQuality" stroke="#323232" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m29.173 8.7209-0.87878 1.9441 0.42601-0.94271c2.6921 3.7225 5.6077 7.2787 8.4495 10.888l-5.285 17.671h3.3727s4.1154-17.667 4.1166-17.671z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.0999"/>
<path d="m13.24 38.286c-1.4368 0-2.627 1.2165-2.627 2.6847v0.5449l0.01254 2.6847h28.749l0.01254-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847h-11.76z" fill="url(#linearGradient1859)" image-rendering="optimizeQuality" stroke="#323232" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m31.896 38.286c1.4368 0 2.627 1.2165 2.627 2.6847v0.5449l-0.01254 2.6847h4.8721l0.01255-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient1835" x1="274.13" x2="353.17" y1="488.65" y2="488.65" gradientTransform="matrix(.29151 0 0 .29096 -66.426 -117.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2244"/>
<linearGradient id="linearGradient2244">
<stop stop-color="#f2e7da" offset="0"/>
<stop stop-color="#bba38a" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient1833" x1="-177.8" x2="-151.06" y1="156.68" y2="156.68" gradientTransform="matrix(1.1509 0 0 1.1499 214.24 -138.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2244"/>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
@ -9,14 +17,10 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(66.12 -173.12)" clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<g transform="matrix(1.1018 0 0 1.0997 -132.55 55.532)" stroke-width=".99932">
<path transform="scale(.26458)" d="m313.65 442.25c-12.632 3.8e-4 -22.873 8.9325-22.873 19.953 0 5.7313 2.8356 11.185 7.7695 14.969h-5.9102c-4.6556 0-8.5098 3.289-8.5098 7.2578v1.4727c0 3.9686 3.8542 7.2578 8.5098 7.2578h8.4297c-0.41158 20.368-23.501 25.607-23.501 41.896l36.083-0.0273h2e-3l36.083 0.0273c0-16.289-23.089-21.529-23.501-41.896h8.4316c4.6556 0 8.5098-3.2892 8.5098-7.2578v-1.4727c0-3.9688-3.8542-7.2578-8.5098-7.2578h-5.9102c4.9339-3.7842 7.7695-9.2374 7.7695-14.969 0-11.021-10.241-19.953-22.873-19.953z" fill="#f2e7da" image-rendering="optimizeQuality" stroke="#323232" stroke-linejoin="round" stroke-width="6.8672"/>
<path d="m82.987 117.01c-0.48926 3e-5 -0.96467 0.0519-1.4205 0.14762 5.8735 0.61613 7.204 5.755 4.6156 8.2086-1.8918 1.5046-7.1912 0.88385-7.1912 0.88385 2.403 0.39363 4.6642 1.7387 6.806 2.2138-4.0398 6.3235 2.9682 6.8855 2.9682 13.098l3.7692 3e-3c0.32759-4.4148-5.9754-5.6962-6.2179-11.085h2.2306c1.232 0 2.2514-0.86993 2.2514-1.9199v-0.38962c0-1.05-1.0194-1.9204-2.2514-1.9204h-1.5638c1.3055-1.0012 2.0561-2.4439 2.0558-3.9602 0-2.9158-2.7096-5.2794-6.0517-5.2794z" image-rendering="optimizeQuality" opacity=".3"/>
</g>
<g transform="matrix(1.1509 0 0 1.1499 148.12 34.001)" stroke-width=".95621">
<path d="m-174.65 154.11c-1.2484 0-2.2826 1.0579-2.2826 2.3347v0.47387l0.0109 2.3347h24.98l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347h-10.218z" fill="#f2e7da" image-rendering="optimizeQuality" stroke="#323232" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7386"/>
<path d="m-158.44 154.11c1.2484 0 2.2826 1.0579 2.2826 2.3347v0.47387l-0.0109 2.3347h4.2333l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347z" image-rendering="optimizeQuality" opacity=".3"/>
</g>
<g clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<path d="m25.008 11.282c-3.6824 1.11e-4 -6.6678 2.599-6.6678 5.8055 0 1.6676 0.82662 3.2544 2.2649 4.3554h-1.7229c-1.3572 0-2.4807 0.95696-2.4807 2.1117v0.4285c0 1.1547 1.1236 2.1117 2.4807 2.1117h2.4574c-0.11998 5.9262-6.8509 7.4506-6.8509 12.19l10.519-0.0079h5.83e-4l10.519 0.0079c0-4.7394-6.7308-6.264-6.8509-12.19h2.4579c1.3572 0 2.4807-0.95702 2.4807-2.1117v-0.4285c0-1.1548-1.1236-2.1117-2.4807-2.1117h-1.7229c1.4383-1.101 2.2649-2.6877 2.2649-4.3554 0-3.2067-2.9854-5.8055-6.6678-5.8055z" fill="url(#linearGradient1835)" image-rendering="optimizeQuality" stroke="#323232" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m25.01 11.282c-0.53907 3.3e-5 -1.0629 0.05707-1.5651 0.16234 6.4714 0.67756 7.9374 6.3288 5.0855 9.027-2.0844 1.6546-7.9233 0.97197-7.9233 0.97197 2.6476 0.43288 5.139 1.912 7.4988 2.4345-4.4511 6.954 3.2704 7.572 3.2704 14.404l4.1529 0.0033c0.36094-4.855-6.5837-6.2641-6.8509-12.19h2.4577c1.3574 0 2.4806-0.95666 2.4806-2.1113v-0.42846c0-1.1547-1.1232-2.1119-2.4806-2.1119h-1.723c1.4384-1.101 2.2654-2.6876 2.2651-4.355 0-3.2065-2.9854-5.8058-6.6678-5.8058z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
<path d="m13.24 38.286c-1.4368 0-2.627 1.2165-2.627 2.6847v0.5449l0.01254 2.6847h28.749l0.01254-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847h-11.76z" fill="url(#linearGradient1833)" image-rendering="optimizeQuality" stroke="#323232" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m31.896 38.286c1.4368 0 2.627 1.2165 2.627 2.6847v0.5449l-0.01254 2.6847h4.8721l0.01255-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient1879" x1="-647.27" x2="-525.69" y1="418.44" y2="418.44" gradientTransform="matrix(.31419 0 0 .31419 209.27 -109.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2244"/>
<linearGradient id="linearGradient2244">
<stop stop-color="#f2e7da" offset="0"/>
<stop stop-color="#bba38a" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient1881" x1="-177.63" x2="-151.24" y1="156.68" y2="156.68" gradientTransform="matrix(1.1509 0 0 1.1499 214.23 -138.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2244"/>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
@ -9,14 +17,10 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(187.28 -172.13)" clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<g transform="matrix(1.1875 0 0 1.1875 21.993 62.665)" stroke-width=".9263">
<path transform="scale(.26458)" d="m-586.48 367.27c-8.3875 7e-4 -15.186 6.6771-15.186 14.912 5e-3 5.9041 3.5581 11.249 9.0606 13.631-1.175 7.2779-4.806 24.057-14.896 25.491-7.4954 1.0649-12.269-4.0964-15.531-10.006 3.5268-2.519 5.6161-6.5403 5.623-10.822 4.3e-4 -7.4063-6.1148-13.41-13.658-13.41-7.5434-2.7e-4 -13.659 6.0039-13.658 13.41 4e-3 6.8197 5.221 12.55 12.123 13.316l15.828 55.826h60.588l15.83-55.826c6.9012-0.7672 12.117-6.4974 12.121-13.316 4.3e-4 -7.4063-6.1148-13.41-13.658-13.41-7.5427 7.9e-4 -13.657 6.0046-13.656 13.41 6e-3 4.2816 2.0951 8.3028 5.6211 10.822-3.2623 5.91-8.0358 11.071-15.531 10.006-10.09-1.4339-13.721-18.213-14.896-25.491 5.5025-2.3817 9.0554-7.7267 9.0606-13.631 7.8e-4 -8.2343-6.7968-14.91-15.184-14.912z" fill="#f2e7da" image-rendering="optimizeQuality" stroke="#323232" stroke-linejoin="round" stroke-width="6.3654"/>
<path d="m-143.38 102.41c-0.45175 1e-3 -0.89925 0.0858-1.3193 0.24908 3.9923 1.4135 3.2642 5.7306 0.49762 6.1609l-5.5195 15.432h2.6458l4.1021-14.771c1.826-0.20299 3.206-1.7191 3.207-3.5233 1.1e-4 -1.9596-1.6179-3.5482-3.6137-3.5481z" image-rendering="optimizeQuality" opacity=".3"/>
</g>
<g transform="matrix(1.1509 0 0 1.1499 26.959 33.01)" stroke-width=".95621">
<path d="m-174.65 154.11c-1.2484 0-2.2826 1.0579-2.2826 2.3347v0.47387l0.0109 2.3347h24.98l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347h-10.218z" fill="#f2e7da" image-rendering="optimizeQuality" stroke="#323232" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7386"/>
<path d="m-158.44 154.11c1.2484 0 2.2826 1.0579 2.2826 2.3347v0.47387l-0.0109 2.3347h4.2333l0.0109-2.3347v-0.47387c0-1.2768-1.0342-2.3347-2.2826-2.3347z" image-rendering="optimizeQuality" opacity=".3"/>
</g>
<g clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<path d="m25 6.1221c-2.6353 2.199e-4 -4.7713 2.0979-4.7713 4.6852 0.0016 1.855 1.1179 3.5343 2.8467 4.2827-0.36917 2.2866-1.51 7.5584-4.6802 8.009-2.355 0.33458-3.8548-1.287-4.8797-3.1438 1.1081-0.79144 1.7645-2.0549 1.7667-3.4002 1.35e-4 -2.327-1.9212-4.2133-4.2912-4.2133-2.3701-8.5e-5 -4.2915 1.8864-4.2912 4.2133 0.00126 2.1427 1.6404 3.9431 3.8089 4.1837l4.973 17.54h19.036l4.9736-17.54c2.1683-0.24104 3.807-2.0414 3.8083-4.1837 1.35e-4 -2.327-1.9212-4.2133-4.2912-4.2133-2.3698 2.48e-4 -4.2909 1.8866-4.2906 4.2133 0.0019 1.3452 0.65826 2.6086 1.7661 3.4002-1.025 1.8569-2.5248 3.4784-4.8797 3.1438-3.1702-0.45052-4.311-5.7223-4.6802-8.009 1.7288-0.7483 2.8451-2.4276 2.8467-4.2827 2.45e-4 -2.5871-2.1355-4.6846-4.7706-4.6852z" fill="url(#linearGradient1879)" image-rendering="optimizeQuality" stroke="#323232" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m39.002 12.342c-0.53645 0.0012-1.0679 0.10189-1.5667 0.29578 4.7409 1.6785 3.8762 6.8051 0.59092 7.3161l-7.6127 18.326h4.2002l4.8712-17.541c2.1684-0.24105 3.8071-2.0414 3.8083-4.1839 1.3e-4 -2.327-1.9213-4.2135-4.2913-4.2134z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
<path d="m13.227 38.286c-1.4368 0-2.627 1.2165-2.627 2.6847v0.5449l0.01254 2.6847h28.749l0.01254-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847h-11.76z" fill="url(#linearGradient1881)" image-rendering="optimizeQuality" stroke="#323232" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m31.883 38.286c1.4368 0 2.627 1.2165 2.627 2.6847v0.5449l-0.01254 2.6847h4.8721l0.01254-2.6847v-0.5449c0-1.4682-1.1903-2.6847-2.627-2.6847z" image-rendering="optimizeQuality" opacity=".3" stroke-width="1.1"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<svg width="50mm" height="50mm" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient1871" x1="12797" x2="12909" y1="-1764.6" y2="-1764.6" gradientTransform="matrix(.23554 0 0 .26678 -3002.1 494.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2244"/>
<linearGradient id="linearGradient2244">
<stop stop-color="#f2e7da" offset="0"/>
<stop stop-color="#bba38a" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient1869" x1="-252.72" x2="-222.34" y1="157.62" y2="157.62" gradientTransform="translate(262.53 -116.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2244"/>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
@ -9,14 +17,10 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(262.53 -116.57)" clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<g transform="matrix(.89025 0 0 1.044 -3267.3 568.27)" image-rendering="optimizeQuality" stroke-width="1.141">
<g transform="matrix(1 0 0 .96581 3.0149 40.728)" stroke-width="1.161">
<path transform="scale(.26458)" d="m12800-1819.4v30.107c0 12.836 27.727 14.826 27.727 14.826-1.5 38.751-21.385 64.766-21.385 64.766l90.971-0.1543s-19.745-26.004-21.23-64.611c0 0 29.28-1.9905 29.28-14.826v-30.107h-20.037s1.946 8.844-1.995 12.809c-4.396 4.4228-10.269 4.4228-14.666 0-3.94-3.9646-1.992-12.809-1.992-12.809h-27.982s1.948 8.844-1.992 12.809c-4.764 4.7917-11.46 4.7917-16.223 0-3.941-3.9646-1.992-12.809-1.992-12.809z" fill="#f2e7da" stroke="#323232" stroke-linejoin="round" stroke-width="7.9784"/>
<path transform="scale(.26458)" d="m12892-1819.4 0.06 29.798c-0.384 4.0517-10.418 9.1982-16.977 9.5002l-66.004 0.057c-1.013 0.9502 10.595 4.8318 15.669 5.5772l37.383 4.9066c-2.234 24.91 22.109 59.78 22.086 59.703h12.608s-19.745-26.003-21.23-64.611c10.814-1.5517 12.542-3.1876 17.14-4.1537h0.08l-0.01-0.014c4.343-0.9285 11.925-5.4062 12.065-10.658v-30.107z" opacity=".3"/>
</g>
</g>
<path d="m-249.29 154.66c-1.4368 0-2.627 1.2164-2.627 2.6846v0.54488l0.0126 2.6846h28.75l0.0125-2.6846v-0.54488c0-1.4682-1.1902-2.6846-2.627-2.6846h-11.76z" fill="#f2e7da" image-rendering="optimizeQuality" stroke="#323232" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
<path d="m-230.64 154.66c1.4368 0 2.627 1.2164 2.627 2.6846v0.54488l-0.0125 2.6846h4.8721l0.0125-2.6846v-0.54488c0-1.4682-1.1902-2.6846-2.627-2.6846z" image-rendering="optimizeQuality" opacity=".3"/>
<g clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<path d="m12.855 9.041v8.0319c0 3.4244 6.5309 3.9552 6.5309 3.9552l-3.9788 17.278 19.311-0.041163-3.9423-17.237s6.8967-0.53102 6.8967-3.9552v-8.0319h-4.7196s0.45836 2.3594-0.46991 3.4172c-1.0354 1.1799-2.4188 1.1799-3.4545 0-0.92804-1.0577-0.4692-3.4172-0.4692-3.4172h-6.5909s0.45884 2.3594-0.4692 3.4172c-1.1221 1.2783-2.6993 1.2783-3.8212 0-0.92827-1.0577-0.4692-3.4172-0.4692-3.4172z" fill="url(#linearGradient1871)" image-rendering="optimizeQuality" stroke="#323232" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m34.525 9.041 0.01413 7.9494c-0.09045 1.0809-2.4539 2.4539-3.9988 2.5344l-15.547 0.01521c-0.2386 0.25349 2.4956 1.289 3.6907 1.4879 12.83-0.72876 10.438 3.6556 12.949 17.236h3.0847c0 2.14e-4 -1.7152-6.3944-4.0572-17.237 2.5472-0.41396 2.9542-0.85038 4.0372-1.1081h0.01884l-0.0024-0.0037c1.023-0.2477 2.8088-1.4423 2.8418-2.8433v-8.0319z" image-rendering="optimizeQuality" opacity=".33" stroke-width=".29103"/>
<path d="m13.239 38.286c-1.4368 0-2.627 1.2164-2.627 2.6846v0.54488l0.0126 2.6846h28.75l0.0125-2.6846v-0.54488c0-1.4682-1.1902-2.6846-2.627-2.6846h-11.76z" fill="url(#linearGradient1869)" image-rendering="optimizeQuality" stroke="#323232" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6"/>
<path d="m31.889 38.286c1.4368 0 2.627 1.2164 2.627 2.6846v0.54488l-0.0125 2.6846h4.8721l0.0125-2.6846v-0.54488c0-1.4682-1.1902-2.6846-2.627-2.6846z" image-rendering="optimizeQuality" opacity=".33"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -9,11 +9,11 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(695.98 -135.43)">
<path d="m-670.98 141.1c-2.3252 1.6e-4 -4.2103 1.0257-4.2106 2.2908 0.51503 1.0047 1.1397 1.9002 1.6469 2.9616-16.889 20.294-5.3261 27.206-4.8395 26.72h14.806c0.42979 0.42984 9.4984-4.9168-0.032-20.157l-4.1597 6.0513c-0.68551 0.9378-1.4877 1.1848-2.342 0.74155-0.85429-0.44326-1.1853-1.4877-0.74208-2.342l5.0217-7.7127c-0.77779-1.0592-1.6341-2.1576-2.5854-3.3006 0.50718-1.0614 1.1319-1.9568 1.6469-2.9616 0-1.2651-1.8859-2.2907-4.2111-2.2908z" fill="#584e48" stroke="#1e1e1e" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m-670.98 141.1c-0.59918 3e-5 -1.1683 0.0688-1.6843 0.19163 1.6776 0.30166 4.1038 1.1245 4.1038 2.1383l-1.5813 3.4292 2.3097 3.321s-3.5347 4.928-3.1567 8.4391c0.79826-3.6319 3.5088-5.1081 5.1582-8.9665-0.67039-0.92832-1.7768-2.3128-2.5854-3.3006 0.50714-1.0614 1.1318-1.9568 1.6469-2.9616 0-1.2651-1.8852-2.2905-4.2104-2.2906zm7.3715 11.815-0.80877 1.1765c5.3321 11.281-0.8975 18.731-1.6994 19.409h2.9138c0.0905-0.0104 8.9901-6.5074-0.40557-20.586z" opacity=".2"/>
<path d="m-674.57 143.25 1.6504 2.8988s-3e-3 0.22135-0.1433 0.50126c-2.9118 3.9529-9.4538 11.319-8.9492 19.451 0.55736 3.417 1.8611 5.2335 3.0072 6.3733l0.57793 3e-3c-6.2795-10.198 1.4503-17.629 6.0151-26.235l-1.349-2.7948s0.9606-1.5696 2.1693-1.5696c-1.4333-0.14726-2.7943 0.71077-2.9786 1.3721z" fill="#fff" opacity=".25"/>
<path d="m-670.98 171.88s-9.1309 0.0481-11.691 1.6192c-1.7273 1.0602-2.1348 3.6514-1.8998 6.3237h27.182c0.23496-2.6723-0.17255-5.2636-1.8999-6.3237-2.5597-1.5711-11.691-1.6192-11.691-1.6192z" fill="#584e48" stroke="#1e1e1e" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m-670.98 172.57s-8.7121-0.13733-11.624 1.6658c-0.36985 0.22904-0.69926 0.83943-0.95359 1.3902 0.26077-0.33131 0.50213-0.61302 0.88663-0.84902 2.5597-1.5711 11.691-1.6191 11.691-1.6191s9.1318 0.0479 11.692 1.6191c0.39104 0.24 0.59242 0.53162 0.85561 0.8701 0.0258-0.0759-0.40837-1.1579-1.1438-1.5962-2.7554-1.492-11.403-1.4808-11.403-1.4808z" fill="#fff" opacity=".25"/>
<g clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<path d="m25 5.7039c-2.2631 1.6e-4 -4.0979 1.0257-4.0981 2.2908 0.50128 1.0047 1.1093 1.9002 1.6029 2.9616-16.438 20.294-5.1839 27.206-4.7103 26.72h14.411c0.41831 0.42984 9.2447-4.9168-0.03114-20.157l-4.0486 6.0513c-0.6672 0.9378-1.448 1.1848-2.2795 0.74155-0.83148-0.44326-1.1536-1.4877-0.72226-2.342l4.8876-7.7127c-0.75702-1.0592-1.5905-2.1576-2.5164-3.3006 0.49364-1.0614 1.1017-1.9568 1.6029-2.9616 0-1.2651-1.8355-2.2907-4.0986-2.2908z" fill="#584e48" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m25 5.7039c-0.58318 3e-5 -1.1371 0.0688-1.6393 0.19163 1.6328 0.30166 3.9942 1.1245 3.9942 2.1383l-1.5391 3.4292 2.248 3.321s-3.4403 4.928-3.0724 8.4391c0.77694-3.6319 3.4151-5.1081 5.0204-8.9665-0.65249-0.92832-1.7293-2.3128-2.5164-3.3006 0.4936-1.0614 1.1016-1.9568 1.6029-2.9616 0-1.2651-1.8349-2.2905-4.098-2.2906zm7.1746 11.815-0.78717 1.1765c5.1897 11.281-0.87353 18.731-1.654 19.409h2.836c0.08808-0.0104 8.75-6.5074-0.39474-20.586z" image-rendering="optimizeQuality" opacity=".2"/>
<path d="m21.506 7.8539 1.6063 2.8988s-3e-3 0.22135-0.13947 0.50126c-2.834 3.9529-9.2013 11.319-8.7102 19.451 0.54247 3.417 1.8114 5.2335 2.9269 6.3733l0.56249 3e-3c-6.1118-10.198 1.4116-17.629 5.8545-26.235l-1.313-2.7948s0.93494-1.5696 2.1114-1.5696c-1.395-0.14726-2.7197 0.71077-2.899 1.3721z" fill="#fff" image-rendering="optimizeQuality" opacity=".25"/>
<path d="m25 36.457s-9.1309 0.0481-11.691 1.6192c-1.7273 1.0602-2.1348 3.6514-1.8998 6.3237h27.182c0.23496-2.6723-0.17255-5.2636-1.8999-6.3237-2.5597-1.5711-11.691-1.6192-11.691-1.6192z" fill="#584e48" image-rendering="optimizeQuality" stroke="#1e1e1e" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m25 37.147s-8.7121-0.13733-11.624 1.6658c-0.36985 0.22904-0.69926 0.83943-0.95359 1.3902 0.26077-0.33131 0.50213-0.61302 0.88663-0.84902 2.5597-1.5711 11.691-1.6191 11.691-1.6191s9.1318 0.0479 11.692 1.6191c0.39104 0.24 0.59242 0.53162 0.85561 0.8701 0.0258-0.0759-0.40837-1.1579-1.1438-1.5962-2.7554-1.492-11.403-1.4808-11.403-1.4808z" fill="#fff" image-rendering="optimizeQuality" opacity=".25"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -9,17 +9,19 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g fill="#584e48" stroke="#1e1e1e" stroke-linecap="round" stroke-width="1.2">
<path d="m27.862 16.128v-3.0478h4.2238v-4.9794h-4.7535v-3.9198h-4.6732v3.9198h-4.7534v4.9794h4.2238v3.0478"/>
<path d="m31.02 17.838-2.0467-2.7265h-7.9531l-2.0467 2.7272"/>
<path d="m32.658 38.045s8.3231-13.409 7.078-16.024c-1.2451-2.6141-7.4925-4.528-14.736-4.528s-13.491 1.9133-14.736 4.528c-1.2451 2.6143 7.078 16.024 7.078 16.024z"/>
<g transform="translate(556.75 -84.536)">
<g fill="#584e48" stroke="#1e1e1e" stroke-linecap="round">
<path d="m-528.88 100.25v-3.0478h4.2323v-4.9794h-4.763v-3.9198h-4.6826v3.9198h-4.763v4.9794h4.2323v3.0478" stroke-width="1.2"/>
<path d="m-525.71 101.96-2.0508-2.7265h-7.9691l-2.0508 2.7272" stroke-linejoin="round" stroke-width="1.1999"/>
<path d="m-524.07 122.16s8.3399-13.409 7.0922-16.024c-1.2476-2.6141-7.5076-4.528-14.766-4.528s-13.518 1.9133-14.766 4.528c-1.2476 2.6143 7.0922 16.024 7.0922 16.024z" stroke-width="1.2"/>
</g>
<path d="m-528.88 99.229 0.69825 2.5365 2.1617 0.2407c0.30358-0.051-1.3337-2.2275-1.7472-2.7772zm-2.868 2.3813c5.0188 0.20125 9.0358 1.1854 10.126 3.4696 1.2476 2.6144-4.9159 17.082-4.9159 17.082h2.4635s8.3397-13.409 7.092-16.023c-5.186-3.2229-6.4547-4.1904-14.766-4.528z" opacity=".2"/>
<g fill="#fff">
<path d="m-531.59 102.22c-4.1871-0.18561-14.535 1.3605-14.416 5.021 1.2641 5.4123 4.899 9.9383 6.9676 14.33l0.88001 0.31623c-6.8967-14.071-11.467-17.804 6.5681-19.667z" opacity=".25"/>
<path d="m-533.47 88.946-0.0173 3.8676h0.58522l0.0174-3.8676zm-4.7595 3.8963-8e-3 3.7495h0.82922l8e-3 -3.7495zm4.2036 3.7548 0.0276 1.9829h0.55771l-0.0276-1.9829z" opacity=".25"/>
<path d="m-536.48 101.23 1.039-1.386 1.5354-3e-3 -2.2303 1.3654z" opacity=".25"/>
</g>
<path d="m-531.73 120.99s-9.1309 0.0481-11.691 1.6192c-1.7273 1.0602-2.1348 3.6514-1.8998 6.3237h27.182c0.23495-2.6723-0.17255-5.2636-1.8999-6.3237-2.5597-1.5711-11.691-1.6192-11.691-1.6192z" fill="#584e48" stroke="#1e1e1e" stroke-linejoin="round" stroke-width="1.2"/>
<path d="m-531.73 121.68s-8.7121-0.13732-11.624 1.6658c-0.36985 0.22905-0.69925 0.83944-0.95359 1.3902 0.26077-0.3313 0.50213-0.61301 0.88663-0.84901 2.5598-1.5711 11.691-1.6191 11.691-1.6191s9.1318 0.0479 11.692 1.6191c0.39104 0.24 0.59243 0.53161 0.85561 0.87009 0.0258-0.0759-0.40837-1.1578-1.1438-1.5962-2.7554-1.492-11.403-1.4808-11.403-1.4808z" fill="#fff" opacity=".25"/>
</g>
<path d="m27.862 15.112 0.69684 2.5365 2.1574 0.2407c0.30297-0.051-1.331-2.2275-1.7437-2.7772zm-2.8623 2.3813c5.0088 0.20125 9.0176 1.1854 10.106 3.4696 1.2451 2.6144-4.906 17.082-4.906 17.082h2.4585s8.3229-13.409 7.0778-16.023c-5.1756-3.2229-6.4417-4.1904-14.736-4.528z" opacity=".2"/>
<g fill="#fff">
<path d="m25.15 18.102c-4.1787-0.18561-14.506 1.3605-14.387 5.021 1.2616 5.4123 4.8891 9.9383 6.9536 14.33l0.87825 0.31623c-6.8828-14.071-11.444-17.804 6.5549-19.667z" opacity=".25"/>
<path d="m23.283 4.828-0.0173 3.8676h0.58405l0.0174-3.8676zm-4.7499 3.8963-8e-3 3.7495h0.82755l8e-3 -3.7495zm4.1952 3.7548 0.0276 1.9829h0.5566l-0.0276-1.9829z" opacity=".25"/>
<path d="m20.276 17.114 1.0369-1.386 1.5323-3e-3 -2.2259 1.3654z" opacity=".25"/>
</g>
<path d="m25 36.457s-9.1309 0.0481-11.691 1.6192c-1.7273 1.0602-2.1348 3.6514-1.8998 6.3237h27.182c0.23495-2.6723-0.17255-5.2636-1.8999-6.3237-2.5597-1.5711-11.691-1.6192-11.691-1.6192z" fill="#584e48" stroke="#1e1e1e" stroke-linejoin="round" stroke-width="1.2"/>
<path d="m25 37.147s-8.7121-0.13732-11.624 1.6658c-0.36985 0.22905-0.69925 0.83944-0.95359 1.3902 0.26077-0.3313 0.50213-0.61301 0.88663-0.84901 2.5598-1.5711 11.691-1.6191 11.691-1.6191s9.1318 0.0479 11.692 1.6191c0.39104 0.24 0.59243 0.53161 0.85561 0.87009 0.0258-0.0759-0.40837-1.1578-1.1438-1.5962-2.7554-1.492-11.403-1.4808-11.403-1.4808z" fill="#fff" opacity=".25"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -9,15 +9,29 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g>
<path d="m21.101 24.683c2.3324-1.3599 2.6805-3.7963 2.6805-3.7963m10.499 16.635s4.4456-6.2031 1.6794-15.716c-1.4175-4.8748-4.7289-9.7925-11.503-13.517-1.0572-0.58128-3.1724-2.5673-3.1724-2.5673-0.79592 1.2637-0.80913 4.5175-0.80913 4.5175l-4.5181 1.4905s-1.2457 4.5776-9.5409 9.2125l-0.093595 4.5103 1.0291 1.2269 2.2735-1.1059 1.0087 1.4204-2.077 1.0609 2.3651 1.6864 2.1802-0.77825 0.81886-2.2591 7.18-2.0208c1.5945 5.723-7.9408 5.9181-5.3826 12.839z" fill="#584e48" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.2"/>
<path d="m8.1357 22.275s0.4024 0.93091 0.72431 0.85336c0.32192-0.07773 1.234-1.474 0.83163-1.5257-0.40241-0.05178-1.5559 0.67233-1.5559 0.67233z" opacity=".4"/>
<path d="m20.475 10.239s3.6576-2.6251 5.8421-3.3766c0.47683 1.9402 0.56742 3.7357-0.89094 5.9116" fill="#584e48" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.2"/>
<path d="m27.139 10.585c13.095 11.939 3.3582 27.082 2.2058 26.937h4.9355s8.6715-16.039-7.1413-26.937z" opacity=".2"/>
<path d="m20.851 10.768-4.4218 1.4773c-2.31e-4 -4.82e-4 -1.134 4.4009-9.409 9.0769l-0.085287 3.9142c0.32763-0.54585 0.26269-3.5629 0.61133-3.6913 8.2951-4.6349 9.977-9.0087 9.977-9.0087 3.6831-0.71612 6.2296-3.437 8.3456-4.8257-0.38912-0.00858-4.5285 2.5805-5.0178 3.0573zm1.2629 13.95-0.33379 0.25723c1.1542 5.8015-7.3885 5.9736-5.6142 11.94l0.25542 0.0021c0.5925-7.4279 7.352-4.459 5.6926-12.2z" fill="#fff" opacity=".25"/>
<path d="m18.503 24.689c0.08697 0.04663 1.7524-0.19915 2.5776-0.67384 1.3827-0.79533 2.2782-2.784 2.281-4.5716 0.03586 0.02187-0.72448 2.968-4.8586 5.2455z" opacity=".15"/>
<path d="m19.304 14.933c-0.53542 0.68191-0.75841 1.4114-0.79413 2.1938 0.02534 0.07987 0.13938 0.0521 0.20952 0.03624 0.6074-0.09702 1.2404-0.10538 1.8344-0.26072 2.2235-1.113-0.10673-2.9377-1.2498-1.9694z" fill-rule="evenodd" opacity=".4" style="paint-order:fill markers stroke"/>
<path d="m24.999 36.464s-9.1309 0.04814-11.691 1.6192c-1.7273 1.0602-2.1348 3.6515-1.8998 6.3237h27.182c0.23496-2.6723-0.17255-5.2635-1.8999-6.3237-2.5597-1.5711-11.691-1.6192-11.691-1.6192z" fill="#584e48" stroke="#1e1e1e" stroke-linejoin="round" stroke-width="1.2"/>
<path d="m24.999 37.153s-8.7121-0.13732-11.624 1.6658c-0.36985 0.22905-0.69926 0.83944-0.95359 1.3902 0.26077-0.3313 0.50213-0.61301 0.88664-0.84902 2.5597-1.5711 11.691-1.6191 11.691-1.6191s9.1318 0.04794 11.692 1.6191c0.39104 0.24 0.59242 0.53162 0.85561 0.8701 0.02583-0.0759-0.40837-1.1579-1.1438-1.5962-2.7554-1.492-11.403-1.4808-11.403-1.4808z" fill="#fff" opacity=".25"/>
<g transform="translate(954.12 -254.46)">
<g transform="matrix(1 0 0 1.0197 -657.44 -138.11)" stroke-width=".99029">
<g stroke-width=".99029">
<g transform="matrix(1.0516 0 0 1.0514 15.351 -22.013)" stroke-width=".9418">
<g transform="translate(-19.913 112.74)" stroke-width=".9418">
<path d="m-256.74 297.39c2.2179-1.2685 2.5489-3.541 2.5489-3.541m9.9832 15.517s4.2274-5.786 1.5969-14.659c-1.3479-4.547-4.4968-9.1342-10.938-12.608-1.0053-0.5422-3.0167-2.3947-3.0167-2.3947-0.75685 1.1788-0.76941 4.2138-0.76941 4.2138l-4.2963 1.3903s-1.1846 4.2698-9.0725 8.5932l-0.089 4.2071 0.9786 1.1444 2.1619-1.0316 0.95914 1.3249-1.975 0.98956 2.249 1.573 2.0732-0.72593 0.77866-2.1072 6.8275-1.885c1.5162 5.3383-7.551 5.5203-5.1184 11.976z" fill="#584e48" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.1302"/>
<path d="m-269.07 295.15s0.38264 0.86833 0.68875 0.79599c0.30612-0.0725 1.1734-1.3749 0.7908-1.4231-0.38265-0.0483-1.4796 0.62713-1.4796 0.62713z" opacity=".4"/>
<path d="m-257.33 283.92s3.4781-2.4486 5.5553-3.1496c0.45342 1.8098 0.53956 3.4845-0.8472 5.5142" fill="#584e48" stroke="#1e1e1e" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.1302"/>
<path d="m-251 284.24c12.452 11.136 3.1933 25.261 2.0975 25.126h4.6932s8.2458-14.961-6.7907-25.126z" opacity=".2"/>
</g>
<g stroke-width=".9418">
<g stroke-width=".9418">
<path d="m-276.89 397.15-4.2048 1.378c-2.2e-4 -4.5e-4 -1.0783 4.105-8.9471 8.4666l-0.0811 3.651c0.31155-0.50915 0.24979-3.3234 0.58132-3.4432 7.8879-4.3233 9.4872-8.403 9.4872-8.403 3.5022-0.66798 5.9238-3.2059 7.9359-4.5013-0.37002-8e-3 -4.3062 2.4071-4.7714 2.8518zm1.2009 13.012-0.3174 0.23994c1.0976 5.4115-7.0258 5.572-5.3386 11.138l0.24288 2e-3c0.56341-6.9285 6.9911-4.1592 5.4131-11.379z" fill="#fff" opacity=".25"/>
<path d="m-279.12 410.14c0.0827 0.0435 1.6663-0.18576 2.4511-0.62854 1.3148-0.74186 2.1664-2.5968 2.169-4.2643 0.0341 0.0204-0.68891 2.7684-4.6201 4.8928z" opacity=".2"/>
</g>
</g>
<path d="m-278.23 401.06c-0.59416 0.7028-0.84162 1.4547-0.88126 2.261 0.0281 0.0823 0.15468 0.0537 0.23251 0.0373 0.67403-0.1 1.3765-0.10861 2.0356-0.2687 2.4675-1.1471-0.11844-3.0277-1.3869-2.0297z" fill-rule="evenodd" opacity=".4" style="paint-order:fill markers stroke"/>
</g>
</g>
</g>
<g transform="matrix(.98218 0 0 .96077 -418.48 66.331)" stroke-width="1.0294">
<path d="m-519.91 233.76s-9.2966 0.0501-11.903 1.6853c-1.7586 1.1035-2.1735 3.8005-1.9343 6.5819h27.675c0.23922-2.7814-0.17568-5.4784-1.9343-6.5819-2.6062-1.6353-11.903-1.6853-11.903-1.6853z" fill="#584e48" stroke="#1e1e1e" stroke-linejoin="round" stroke-width="1.2353"/>
<path d="m-519.91 234.48s-8.8702-0.14293-11.834 1.7338c-0.37656 0.2384-0.71194 0.87371-0.97089 1.4469 0.2655-0.34483 0.51124-0.63804 0.90272-0.88368 2.6062-1.6352 11.903-1.6852 11.903-1.6852s9.2975 0.0499 11.904 1.6852c0.39813 0.2498 0.60317 0.55332 0.87113 0.90562 0.0263-0.079-0.41578-1.2051-1.1646-1.6614-2.8054-1.5529-11.61-1.5413-11.61-1.5413z" fill="#fff" opacity=".25"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -9,11 +9,11 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g>
<path d="m24.999 5.6724c-2.3252 1.6e-4 -4.2103 1.0257-4.2106 2.2908 0.51503 1.0047 1.1397 1.9002 1.6469 2.9616-16.889 20.294-5.3261 27.206-4.8395 26.72h14.806c0.42979 0.42984 9.4984-4.9168-0.032-20.157l-4.1597 6.0513c-0.68551 0.9378-1.4877 1.1848-2.342 0.74155-0.85429-0.44326-1.1853-1.4877-0.74208-2.342l5.0217-7.7127c-0.77779-1.0592-1.6341-2.1576-2.5854-3.3006 0.50718-1.0614 1.1319-1.9568 1.6469-2.9616 0-1.2651-1.8859-2.2907-4.2111-2.2908z" fill="#f5f5f5" stroke="#464646" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m24.999 5.6726c-0.59918 3e-5 -1.1683 0.0688-1.6843 0.19163 1.6776 0.30166 4.1038 1.1245 4.1038 2.1383l-1.5813 3.4292 2.3097 3.321s-3.5347 4.928-3.1567 8.4391c0.79826-3.6319 3.5088-5.1081 5.1582-8.9665-0.67039-0.92832-1.7768-2.3128-2.5854-3.3006 0.50714-1.0614 1.1318-1.9568 1.6469-2.9616 0-1.2651-1.8852-2.2905-4.2104-2.2906zm7.3715 11.815-0.80877 1.1765c5.3321 11.281-0.8975 18.731-1.6994 19.409h2.9138c0.0905-0.0104 8.9901-6.5074-0.40557-20.586z" opacity=".15"/>
<path d="m21.411 7.8251 1.6504 2.8988s-3e-3 0.22135-0.1433 0.50126c-2.9118 3.9529-9.4538 11.319-8.9492 19.451 0.55736 3.417 1.8611 5.2335 3.0072 6.3733l0.57793 3e-3c-6.2795-10.198 1.4503-17.629 6.0151-26.235l-1.349-2.7948s0.9606-1.5696 2.1693-1.5696c-1.4333-0.14726-2.7943 0.71077-2.9786 1.3721z" fill="#fff"/>
<path d="m25 36.457s-9.1309 0.0481-11.691 1.6192c-1.7273 1.0602-2.1348 3.6514-1.8998 6.3237h27.182c0.23496-2.6723-0.17255-5.2636-1.8999-6.3237-2.5597-1.5711-11.691-1.6192-11.691-1.6192z" fill="#f5f5f5" stroke="#464646" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m25 37.147s-8.7121-0.13733-11.624 1.6658c-0.36985 0.22904-0.69926 0.83943-0.95359 1.3902 0.26077-0.33131 0.50213-0.61302 0.88663-0.84902 2.5597-1.5711 11.691-1.6191 11.691-1.6191s9.1318 0.0479 11.692 1.6191c0.39104 0.24 0.59242 0.53162 0.85561 0.8701 0.0258-0.0759-0.40837-1.1579-1.1438-1.5962-2.7554-1.492-11.403-1.4808-11.403-1.4808z" fill="#fff"/>
<g clip-rule="evenodd" fill-rule="evenodd" shape-rendering="geometricPrecision">
<path d="m25 5.7039c-2.2631 1.6e-4 -4.0979 1.0257-4.0981 2.2908 0.50128 1.0047 1.1093 1.9002 1.6029 2.9616-16.438 20.294-5.1839 27.206-4.7103 26.72h14.411c0.41831 0.42984 9.2447-4.9168-0.03114-20.157l-4.0486 6.0513c-0.6672 0.9378-1.448 1.1848-2.2795 0.74155-0.83148-0.44326-1.1536-1.4877-0.72226-2.342l4.8876-7.7127c-0.75702-1.0592-1.5905-2.1576-2.5164-3.3006 0.49364-1.0614 1.1017-1.9568 1.6029-2.9616 0-1.2651-1.8355-2.2907-4.0986-2.2908z" fill="#f5f5f5" image-rendering="optimizeQuality" stroke="#373737" stroke-linejoin="round" stroke-width="1.2"/>
<path d="m25 5.7039c-0.58318 3e-5 -1.1371 0.0688-1.6393 0.19163 1.6328 0.30166 3.9942 1.1245 3.9942 2.1383l-1.5391 3.4292 2.248 3.321s-3.4403 4.928-3.0724 8.4391c0.77694-3.6319 3.4151-5.1081 5.0204-8.9665-0.65249-0.92832-1.7293-2.3128-2.5164-3.3006 0.4936-1.0614 1.1016-1.9568 1.6029-2.9616 0-1.2651-1.8349-2.2905-4.098-2.2906zm7.1746 11.815-0.78717 1.1765c5.1897 11.281-0.87353 18.731-1.654 19.409h2.836c0.08808-0.0104 8.75-6.5074-0.39474-20.586z" image-rendering="optimizeQuality" opacity=".15"/>
<path d="m21.506 7.8539 1.6063 2.8988s-3e-3 0.22135-0.13947 0.50126c-2.834 3.9529-9.2013 11.319-8.7102 19.451 0.54247 3.417 1.8114 5.2335 2.9269 6.3733l0.56249 3e-3c-6.1118-10.198 1.4116-17.629 5.8545-26.235l-1.313-2.7948s0.93494-1.5696 2.1114-1.5696c-1.395-0.14726-2.7197 0.71077-2.899 1.3721z" fill="#fff" image-rendering="optimizeQuality"/>
<path d="m25 36.457s-9.1309 0.0481-11.691 1.6192c-1.7273 1.0602-2.1348 3.6514-1.8998 6.3237h27.182c0.23496-2.6723-0.17255-5.2636-1.8999-6.3237-2.5597-1.5711-11.691-1.6192-11.691-1.6192z" fill="#f5f5f5" image-rendering="optimizeQuality" stroke="#373737" stroke-linejoin="round" stroke-width="1.2"/>
<path d="m25 37.147s-8.7121-0.13733-11.624 1.6658c-0.36985 0.22904-0.69926 0.83943-0.95359 1.3902 0.26077-0.33131 0.50213-0.61302 0.88663-0.84902 2.5597-1.5711 11.691-1.6191 11.691-1.6191s9.1318 0.0479 11.692 1.6191c0.39104 0.24 0.59242 0.53162 0.85561 0.8701 0.0258-0.0759-0.40837-1.1579-1.1438-1.5962-2.7554-1.492-11.403-1.4808-11.403-1.4808z" fill="#fff" image-rendering="optimizeQuality"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -9,19 +9,19 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(848.44 -256.07)">
<g fill="#f5f5f5" stroke="#464646" stroke-linecap="round" stroke-width="1.2">
<path d="m-820.58 272.2v-3.0478h4.2238v-4.9794h-4.7535v-3.9198h-4.6732v3.9198h-4.7534v4.9794h4.2238v3.0478"/>
<path d="m-817.42 273.91-2.0467-2.7265h-7.9531l-2.0467 2.7272"/>
<path d="m-815.78 294.11s8.3231-13.409 7.078-16.024c-1.2451-2.6141-7.4925-4.528-14.736-4.528s-13.491 1.9133-14.736 4.528c-1.2451 2.6143 7.078 16.024 7.078 16.024z"/>
<g transform="translate(556.75 -84.536)">
<g fill="#f5f5f5" stroke="#373737" stroke-linecap="round">
<path d="m-528.88 100.25v-3.0478h4.2323v-4.9794h-4.763v-3.9198h-4.6826v3.9198h-4.763v4.9794h4.2323v3.0478" stroke-width="1.2"/>
<path d="m-525.71 101.96-2.0508-2.7265h-7.9691l-2.0508 2.7272" stroke-linejoin="round" stroke-width="1.1999"/>
<path d="m-524.07 122.16s8.3399-13.409 7.0922-16.024c-1.2476-2.6141-7.5076-4.528-14.766-4.528s-13.518 1.9133-14.766 4.528c-1.2476 2.6143 7.0922 16.024 7.0922 16.024z" stroke-width="1.2"/>
</g>
<path d="m-820.58 271.18 0.69684 2.5365 2.1574 0.2407c0.30297-0.051-1.331-2.2275-1.7437-2.7772zm-2.8623 2.3813c5.0088 0.20125 9.0176 1.1854 10.106 3.4696 1.2451 2.6144-4.906 17.082-4.906 17.082h2.4585s8.3229-13.409 7.0778-16.023c-5.1756-3.2229-6.4417-4.1904-14.736-4.528z" opacity=".15"/>
<path d="m-528.88 99.229 0.69825 2.5365 2.1617 0.2407c0.30358-0.051-1.3337-2.2275-1.7472-2.7772zm-2.868 2.3813c5.0188 0.20125 9.0358 1.1854 10.126 3.4696 1.2476 2.6144-4.9159 17.082-4.9159 17.082h2.4635s8.3397-13.409 7.092-16.023c-5.186-3.2229-6.4547-4.1904-14.766-4.528z" opacity=".15"/>
<g fill="#fff">
<path d="m-823.29 274.17c-4.1787-0.18561-14.506 1.3605-14.387 5.021 1.2616 5.4123 4.8891 9.9383 6.9536 14.33l0.87825 0.31623c-6.8828-14.071-11.444-17.804 6.5549-19.667z"/>
<path d="m-825.16 260.9-0.0173 3.8676h0.58405l0.0174-3.8676zm-4.7499 3.8963-8e-3 3.7495h0.82755l8e-3 -3.7495zm4.1952 3.7548 0.0276 1.9829h0.5566l-0.0276-1.9829z"/>
<path d="m-828.16 273.18 1.0369-1.386 1.5323-3e-3 -2.2259 1.3654z"/>
<path d="m-531.59 102.22c-4.1871-0.18561-14.535 1.3605-14.416 5.021 1.2641 5.4123 4.899 9.9383 6.9676 14.33l0.88001 0.31623c-6.8967-14.071-11.467-17.804 6.5681-19.667z"/>
<path d="m-533.47 88.946-0.0173 3.8676h0.58522l0.0174-3.8676zm-4.7595 3.8963-8e-3 3.7495h0.82922l8e-3 -3.7495zm4.2036 3.7548 0.0276 1.9829h0.55771l-0.0276-1.9829z"/>
<path d="m-536.48 101.23 1.039-1.386 1.5354-3e-3 -2.2303 1.3654z"/>
</g>
<path d="m-823.44 292.53s-9.1309 0.0481-11.691 1.6192c-1.7273 1.0602-2.1348 3.6514-1.8998 6.3237h27.182c0.23495-2.6723-0.17255-5.2636-1.8999-6.3237-2.5597-1.5711-11.691-1.6192-11.691-1.6192z" fill="#f5f5f5" stroke="#464646" stroke-linejoin="round" stroke-width="1.2"/>
<path d="m-823.44 293.22s-8.7121-0.13732-11.624 1.6658c-0.36985 0.22905-0.69925 0.83944-0.95359 1.3902 0.26077-0.3313 0.50213-0.61301 0.88663-0.84901 2.5598-1.5711 11.691-1.6191 11.691-1.6191s9.1318 0.0479 11.692 1.6191c0.39104 0.24 0.59243 0.53161 0.85561 0.87009 0.0258-0.0759-0.40837-1.1578-1.1438-1.5962-2.7554-1.492-11.403-1.4808-11.403-1.4808z" fill="#fff"/>
<path d="m-531.73 120.99s-9.1309 0.0481-11.691 1.6192c-1.7273 1.0602-2.1348 3.6514-1.8998 6.3237h27.182c0.23495-2.6723-0.17255-5.2636-1.8999-6.3237-2.5597-1.5711-11.691-1.6192-11.691-1.6192z" fill="#f5f5f5" stroke="#373737" stroke-linejoin="round" stroke-width="1.2"/>
<path d="m-531.73 121.68s-8.7121-0.13732-11.624 1.6658c-0.36985 0.22905-0.69925 0.83944-0.95359 1.3902 0.26077-0.3313 0.50213-0.61301 0.88663-0.84901 2.5598-1.5711 11.691-1.6191 11.691-1.6191s9.1318 0.0479 11.692 1.6191c0.39104 0.24 0.59243 0.53161 0.85561 0.87009 0.0258-0.0759-0.40837-1.1578-1.1438-1.5962-2.7554-1.492-11.403-1.4808-11.403-1.4808z" fill="#fff"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -10,14 +10,14 @@
</rdf:RDF>
</metadata>
<g>
<path d="m21.101 24.683c2.3324-1.3599 2.6805-3.7963 2.6805-3.7963m10.499 16.635s4.4456-6.2031 1.6794-15.716c-1.4175-4.8748-4.7289-9.7925-11.503-13.517-1.0572-0.58128-3.1724-2.5673-3.1724-2.5673-0.79592 1.2637-0.80913 4.5175-0.80913 4.5175l-4.5181 1.4905s-1.2457 4.5776-9.5409 9.2125l-0.093595 4.5103 1.0291 1.2269 2.2735-1.1059 1.0087 1.4204-2.077 1.0609 2.3651 1.6864 2.1802-0.77825 0.81886-2.2591 7.18-2.0208c1.5945 5.723-7.9408 5.9181-5.3826 12.839z" fill="#f5f5f5" stroke="#464646" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.2"/>
<path d="m8.136 22.275s0.4024 0.93091 0.72431 0.85336c0.32192-0.07773 1.234-1.474 0.83163-1.5257-0.40241-0.05178-1.5559 0.67233-1.5559 0.67233z" opacity=".4"/>
<path d="m20.476 10.239s3.6576-2.6251 5.8421-3.3766c0.47683 1.9402 0.56742 3.7357-0.89094 5.9116" fill="#f5f5f5" stroke="#464646" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.2"/>
<path d="m21.102 24.683c2.3324-1.3599 2.6805-3.7963 2.6805-3.7963m10.499 16.635s4.4456-6.2031 1.6794-15.716c-1.4175-4.8748-4.7289-9.7925-11.503-13.517-1.0572-0.58128-3.1724-2.5673-3.1724-2.5673-0.79592 1.2637-0.80913 4.5175-0.80913 4.5175l-4.5181 1.4905s-1.2457 4.5776-9.5409 9.2125l-0.093595 4.5103 1.0291 1.2269 2.2735-1.1059 1.0087 1.4204-2.077 1.0609 2.3651 1.6864 2.1802-0.77825 0.81886-2.2591 7.18-2.0208c1.5945 5.723-7.9408 5.9181-5.3826 12.839z" fill="#f5f5f5" stroke="#373737" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m8.1362 22.275s0.4024 0.93091 0.72431 0.85336c0.32192-0.07773 1.234-1.474 0.83163-1.5257-0.40241-0.05178-1.5559 0.67233-1.5559 0.67233z" opacity=".4"/>
<path d="m20.476 10.24s3.6576-2.6251 5.8421-3.3766c0.47683 1.9402 0.56742 3.7357-0.89094 5.9116" fill="#f5f5f5" stroke="#373737" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m27.139 10.585c13.095 11.939 3.3582 27.082 2.2058 26.937h4.9355s8.6715-16.039-7.1413-26.937z" opacity=".15"/>
<path d="m20.851 10.768-4.4218 1.4773c-2.31e-4 -4.82e-4 -1.134 4.4009-9.409 9.0769l-0.085287 3.9142c0.32763-0.54585 0.26269-3.5629 0.61133-3.6913 8.2951-4.6349 9.977-9.0087 9.977-9.0087 3.6831-0.71612 6.2296-3.437 8.3456-4.8257-0.38912-0.00858-4.5285 2.5805-5.0178 3.0573zm1.2629 13.95-0.33379 0.25723c1.1542 5.8015-7.3885 5.9736-5.6142 11.94l0.25542 0.0021c0.5925-7.4279 7.352-4.459 5.6926-12.2z" fill="#fff"/>
<path d="m18.504 24.689c0.08697 0.04663 1.7524-0.19915 2.5776-0.67384 1.3827-0.79533 2.2782-2.784 2.281-4.5716 0.03586 0.02187-0.72448 2.968-4.8586 5.2455z" opacity=".15"/>
<path d="m19.304 14.933c-0.53542 0.68191-0.75841 1.4114-0.79413 2.1938 0.02534 0.07987 0.13938 0.0521 0.20952 0.03624 0.6074-0.09702 1.2404-0.10538 1.8344-0.26072 2.2235-1.113-0.10673-2.9377-1.2498-1.9694z" fill-rule="evenodd" opacity=".4" style="paint-order:fill markers stroke"/>
<path d="m25 36.464s-9.1309 0.04814-11.691 1.6192c-1.7273 1.0602-2.1348 3.6515-1.8998 6.3237h27.182c0.23496-2.6723-0.17255-5.2635-1.8999-6.3237-2.5597-1.5711-11.691-1.6192-11.691-1.6192z" fill="#f5f5f5" stroke="#464646" stroke-linejoin="round" stroke-width="1.2"/>
<path d="m25 37.153s-8.7121-0.13732-11.624 1.6658c-0.36985 0.22905-0.69926 0.83944-0.95359 1.3902 0.26077-0.3313 0.50213-0.61301 0.88664-0.84902 2.5597-1.5711 11.691-1.6191 11.691-1.6191s9.1318 0.04794 11.692 1.6191c0.39104 0.24 0.59242 0.53162 0.85561 0.8701 0.02583-0.0759-0.40837-1.1579-1.1438-1.5962-2.7554-1.492-11.403-1.4808-11.403-1.4808z" fill="#fff"/>
<path d="m20.852 10.769-4.4218 1.4773c-2.31e-4 -4.82e-4 -1.134 4.4009-9.409 9.0769l-0.085287 3.9142c0.32763-0.54585 0.26269-3.5629 0.61133-3.6913 8.2951-4.6349 9.977-9.0087 9.977-9.0087 3.6831-0.71612 6.2296-3.437 8.3456-4.8257-0.38912-0.00858-4.5285 2.5805-5.0178 3.0573zm1.2629 13.95-0.33379 0.25723c1.1542 5.8015-7.3885 5.9736-5.6142 11.94l0.25542 0.0021c0.5925-7.4279 7.352-4.459 5.6926-12.2z" fill="#fff"/>
<path d="m18.504 24.689c0.08697 0.04664 1.7524-0.19915 2.5776-0.67384 1.3827-0.79533 2.2782-2.784 2.281-4.5716 0.03586 0.02187-0.72448 2.968-4.8586 5.2455z" opacity=".15"/>
<path d="m19.437 14.962c-0.62484 0.75345-0.88507 1.5595-0.92676 2.424 0.02955 0.08823 0.16267 0.05757 0.24451 0.03999 0.70883-0.10721 1.4475-0.11644 2.1407-0.28807 2.5949-1.2298-0.12456-3.246-1.4585-2.176z" fill-rule="evenodd" opacity=".4" style="paint-order:fill markers stroke"/>
<path d="m25 36.464s-9.1309 0.04813-11.691 1.6192c-1.7273 1.0602-2.1348 3.6515-1.8998 6.3237h27.182c0.23496-2.6723-0.17255-5.2635-1.8999-6.3237-2.5597-1.5711-11.691-1.6192-11.691-1.6192z" fill="#f5f5f5" stroke="#373737" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m25 37.154s-8.7121-0.13732-11.624 1.6658c-0.36985 0.22905-0.69926 0.83944-0.95359 1.3902 0.26077-0.3313 0.50213-0.61301 0.88664-0.84902 2.5597-1.5711 11.691-1.6191 11.691-1.6191s9.1318 0.04794 11.692 1.6191c0.39104 0.24 0.59242 0.53162 0.85561 0.8701 0.02583-0.0759-0.40837-1.1579-1.1438-1.5962-2.7554-1.492-11.403-1.4808-11.403-1.4808z" fill="#fff"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -10,7 +10,7 @@
</rdf:RDF>
</metadata>
<g transform="translate(1032.8 -254.83)">
<path d="m-1011.2 282.43h6.741m-9.1533-9.2635c0 1.6784 0.6865 3.2835 1.8945 4.4463l-3.5182 2.0355 0.4153 2.7816h4.1499c-0.7656 3.4499-2.655 7.619-4.8788 8.8661s-5.1074 3.0019-4.6671 7.938l24.774 2e-5c0.44032-4.936-2.4434-6.6909-4.6671-7.938-2.2238-1.2471-4.1132-5.4162-4.8788-8.8661h4.1499l0.4153-2.7816-3.5181-2.0355c1.2079-1.1629 1.8943-2.7679 1.8943-4.4463 3e-4 -3.2635-2.5328-5.7305-5.7832-5.7305-3.2504-1e-5 -5.7834 2.467-5.7832 5.7305z" fill="#f5f5f5" stroke="#464646" stroke-width="1.2"/>
<path d="m-1011.2 282.43h6.741m-9.1533-9.2635c0 1.6784 0.6865 3.2835 1.8945 4.4463l-3.5182 2.0355 0.4153 2.7816h4.1499c-0.7656 3.4499-2.655 7.619-4.8788 8.8661s-5.1074 3.0019-4.6671 7.938l24.774 2e-5c0.44032-4.936-2.4434-6.6909-4.6671-7.938-2.2238-1.2471-4.1132-5.4162-4.8788-8.8661h4.1499l0.4153-2.7816-3.5181-2.0355c1.2079-1.1629 1.8943-2.7679 1.8943-4.4463 3e-4 -3.2635-2.5328-5.7305-5.7832-5.7305-3.2504-1e-5 -5.7834 2.467-5.7832 5.7305z" fill="#f5f5f5" stroke="#373737" stroke-width="1.2"/>
<g transform="matrix(1 0 0 1.0067 -.086738 -.84905)" stroke-width=".99668">
<g transform="matrix(.22844 0 0 .248 -2288.3 1233.4)" stroke-width="1.1079">
<g transform="matrix(3.7797 0 0 3.7788 5511 -3938.6)" clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" stroke-width="1.108">

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -12,18 +12,18 @@
<g transform="translate(890.99 -254.97)">
<g transform="matrix(1.0653 -1.6619e-6 1.7183e-6 1.1015 60.229 -88.914)" stroke-width=".92317">
<g transform="translate(-.47104 57.861)" stroke-width=".92317">
<ellipse cx="-869.03" cy="261.51" rx="3.3757" ry="3.0692" fill="#f5f5f5" stroke="#464646" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.1078" style="paint-order:normal"/>
<path d="m-871.38 264c-8.0185 3.3717-5.9308 13.098-5.9308 13.098h16.67s1.9901-9.7287-6.0304-13.1z" fill="#f5f5f5" stroke="#464646" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.1078"/>
<ellipse cx="-869.03" cy="261.51" rx="3.3757" ry="3.0692" fill="#f5f5f5" stroke="#373737" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.1078" style="paint-order:normal"/>
<path d="m-871.38 264c-8.0185 3.3717-5.9308 13.098-5.9308 13.098h16.67s1.9901-9.7287-6.0304-13.1z" fill="#f5f5f5" stroke="#373737" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.1078"/>
<path d="m-869.2 258.35c-3e-3 4e-3 0.0468 0.24702-9e-5 1e-5 2.0721 1.0924 2.716 3.1602 1.3257 5.6521 7.4862 3.946 1.2232 9.0959 1.223 9.0956h3.285s4.6099-5.7251-3.4106-9.096c2.82-4.0697-0.35663-5.3642-2.423-5.6517z" opacity=".15"/>
<path d="m-876.09 269.23c0.30605-0.66789 2.6759-3.9728 4.9601-4.5414l2.6114-0.0452c-2.2101 0.62926-2.8265 0.51909-7.5714 4.5865z" fill="#fff"/>
<path d="m-870.03 259.21c-0.43764-0.0766-3.2608 2.0242-0.75718 4.209-0.39301-1.0991-0.62705-3.0945 0.75718-4.209z" fill="#fff"/>
</g>
<path d="m-869.45 324.7c-1.8992 0-2.2626 2.3918-3.9858 2.5812-1.7548 0.19294-3.2584-2.0867-5.0591-1.5673-1.44 0.41535-0.74988 2.3472-1.7394 2.8665-1.3507 0.70882-3.0684-1.6542-5.0974-0.26924 6.5894 7.9707 7.7911 12.615 7.6922 18.431h16.379c-0.0989-5.8164 1.1027-10.461 7.6922-18.431-2.029-1.385-3.7467 0.97806-5.0974 0.26924-0.98957-0.5193-0.29941-2.4512-1.7394-2.8665-1.8007-0.51935-3.3042 1.7603-5.0591 1.5673-1.7232-0.18941-2.0866-2.5812-3.9858-2.5812z" fill="#f5f5f5" stroke="#464646" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.1078"/>
<path d="m-869.45 324.7c-1.8992 0-2.2626 2.3918-3.9858 2.5812-1.7548 0.19294-3.2584-2.0867-5.0591-1.5673-1.44 0.41535-0.74988 2.3472-1.7394 2.8665-1.3507 0.70882-3.0684-1.6542-5.0974-0.26924 6.5894 7.9707 7.7911 12.615 7.6922 18.431h16.379c-0.0989-5.8164 1.1027-10.461 7.6922-18.431-2.029-1.385-3.7467 0.97806-5.0974 0.26924-0.98957-0.5193-0.29941-2.4512-1.7394-2.8665-1.8007-0.51935-3.3042 1.7603-5.0591 1.5673-1.7232-0.18941-2.0866-2.5812-3.9858-2.5812z" fill="#f5f5f5" stroke="#373737" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.1078"/>
<path transform="scale(.26458)" d="m-3340.9 1241.5c-0.4947-0.021-0.9741 0.012-1.4375 0.1114 15.684 19.551 28.67 40.14 26.942 65.514l2.7829-0.033c0.9898-44.554-27.866-57.797-16.697-62.204-4.5198-0.8735-8.3832-3.252-11.59-3.3887z" fill="#fff"/>
</g>
<path d="m-850.63 272.22c-10.67 10.91-10.151 15.741-10.113 20.777l3.4768 0.013c-0.10536-6.4065 1.1747-11.522 8.1943-20.302-0.54036-0.38138-1.0601-0.50512-1.558-0.48783z" opacity=".15"/>
<g transform="rotate(-8.9382e-5 766040 -1950857)">
<path d="m-869.03 290.23s-9.1309 0.0481-11.691 1.6192c-1.7273 1.0602-2.1348 3.6515-1.8998 6.3237h27.182c0.23496-2.6723-0.17255-5.2635-1.8998-6.3237-2.5598-1.5711-11.691-1.6192-11.691-1.6192z" fill="#f5f5f5" stroke="#464646" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m-869.03 290.23s-9.1309 0.0481-11.691 1.6192c-1.7273 1.0602-2.1348 3.6515-1.8998 6.3237h27.182c0.23496-2.6723-0.17255-5.2635-1.8998-6.3237-2.5598-1.5711-11.691-1.6192-11.691-1.6192z" fill="#f5f5f5" stroke="#373737" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m-869.03 290.92s-8.7121-0.13733-11.624 1.6658c-0.36985 0.22905-0.69925 0.83944-0.95359 1.3902 0.26077-0.3313 0.50213-0.61301 0.88663-0.84901 2.5598-1.5711 11.691-1.6191 11.691-1.6191s9.1318 0.0479 11.692 1.6191c0.39104 0.24 0.59243 0.53161 0.85561 0.87009 0.0258-0.0759-0.40837-1.1578-1.1438-1.5962-2.7554-1.492-11.403-1.4808-11.403-1.4808z" fill="#fff"/>
</g>
</g>

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -9,7 +9,7 @@
</cc:Work>
</rdf:RDF>
</metadata>
<path d="m17.85 20.421h14.3m-18.091-10.752c-1.0715 8.7669 1.1162 10.677 3.7915 10.752l-2.8185 18.159h19.937l-2.8184-18.159c2.6754-0.0745 4.863-1.9849 3.7915-10.752l-3.6489-0.52917-1.0857 3.6427-3.1781-0.0995-0.52803-3.754h-5.002l-0.5275 3.754-3.1781 0.0995-1.0857-3.6427z" fill="#f5f5f5" stroke="#464646" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m17.85 20.421h14.3m-18.091-10.752c-1.0715 8.7669 1.1162 10.677 3.7915 10.752l-2.8185 18.159h19.937l-2.8184-18.159c2.6754-0.0745 4.863-1.9849 3.7915-10.752l-3.6489-0.52917-1.0857 3.6427-3.1781-0.0995-0.52803-3.754h-5.002l-0.5275 3.754-3.1781 0.0995-1.0857-3.6427z" fill="#f5f5f5" stroke="#373737" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m17.85 20.95c6.907 0 11.664-0.12154 13.516 16.043l2.5442-1.3e-4 -1.7601-16.042c3e-5 0-6.0245 1e-3 -14.3 0z" opacity=".15"/>
<g fill="#fff">
<path d="m14.658 10.226 2.3029-0.28599c-1.9358 0.31197-2.3395 5.2958-2.3395 5.2958-0.24076-0.17655-0.19025-4.9033 0.0366-5.0098z"/>
@ -17,9 +17,7 @@
<path d="m32.76 9.8231 0.94477 0.11826c-0.79385 0.49954-1.5581 1.9884-1.5581 1.9884z"/>
<path d="m18.374 21.033 2.665-0.012c-1.3923 6e-3 -3.541 4.6399-4.5703 12.771z"/>
</g>
<g>
<path d="m33.825 9.3625c0.36096 6.3635 0.48485 11.655-5.6772 11.588h2.6458c7.6429 0.25738 5.172-11.265 5.148-11.281z" opacity=".15"/>
<path d="m25 36.464s-9.1309 0.04813-11.691 1.6192c-1.7273 1.0602-2.1348 3.6515-1.8998 6.3237h27.182c0.23496-2.6723-0.17255-5.2635-1.8999-6.3237-2.5597-1.5711-11.691-1.6192-11.691-1.6192z" fill="#f5f5f5" stroke="#464646" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m25 37.153s-8.7121-0.13732-11.624 1.6658c-0.36985 0.22905-0.69926 0.83944-0.95359 1.3902 0.26077-0.3313 0.50213-0.61301 0.88664-0.84902 2.5597-1.5711 11.691-1.6191 11.691-1.6191s9.1318 0.04794 11.692 1.6191c0.39104 0.24 0.59242 0.53161 0.85561 0.87009 0.02583-0.0759-0.40837-1.1579-1.1438-1.5962-2.7554-1.492-11.403-1.4808-11.403-1.4808z" fill="#fff"/>
</g>
<path d="m33.825 9.3625c0.36096 6.3635 0.48485 11.655-5.6772 11.588h2.6458c7.6429 0.25738 5.172-11.265 5.148-11.281z" opacity=".15"/>
<path d="m25 36.464s-9.1309 0.04813-11.691 1.6192c-1.7273 1.0602-2.1348 3.6515-1.8998 6.3237h27.182c0.23496-2.6723-0.17255-5.2635-1.8999-6.3237-2.5597-1.5711-11.691-1.6192-11.691-1.6192z" fill="#f5f5f5" stroke="#373737" stroke-linejoin="round" stroke-opacity=".99994" stroke-width="1.2"/>
<path d="m25 37.153s-8.7121-0.13732-11.624 1.6658c-0.36985 0.22905-0.69926 0.83944-0.95359 1.3902 0.26077-0.3313 0.50213-0.61301 0.88664-0.84902 2.5597-1.5711 11.691-1.6191 11.691-1.6191s9.1318 0.04794 11.692 1.6191c0.39104 0.24 0.59242 0.53161 0.85561 0.87009 0.02583-0.0759-0.40837-1.1579-1.1438-1.5962-2.7554-1.492-11.403-1.4808-11.403-1.4808z" fill="#fff"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB