{"matchId":"57912755","creationMatch":"match","runtimeMatch":"match","verifiedAt":"2026-11-01T04:28:01Z","creationBytecode":{"onchainBytecode":"0x60806040526001600c5534801561001557600080fd5b506040514690806052612358823960408051918290036052018220828201825260078352660467374537761760cc1b6020938401528151808301835260018152603160f81b908401528151808401919091527f2e2427526d910de2123a0b0f244ea8df704150c27ef595dc96d7a33cd43d78a6818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612256806101026000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610b0e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b31565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b5b565b604080519115158252519081900360200190f35b610339610b72565b604080516001600160a01b039092168252519081900360200190f35b61035d610b81565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b87565b61035d610c21565b6103b5610c45565b6040805160ff9092168252519081900360200190f35b61035d610c4a565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c50565b61035d610cd2565b61035d610cd8565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610cde565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610fdc565b61035d610fee565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316610ff4565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611006565b6040805192835260208301919091528051918290030190f35b6102446113aa565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356113cb565b61035d6113d8565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166113de565b610339611547565b610339611556565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611565565b61035d600480360360408110156105a357600080fd5b506001600160a01b0381358116916020013516611765565b61023a611782565b600c5460011461060c576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c558415158061061f5750600084115b61065a5760405162461bcd60e51b81526004018080602001828103825260238152602001806121dd6023913960400191505060405180910390fd5b600080610665610b31565b5091509150816001600160701b03168710801561068a5750806001600160701b031686105b6106db576040805162461bcd60e51b815260206004820152601f60248201527f467374737761703a20494e53554646494349454e545f4c495155494449545900604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107195750806001600160a01b0316896001600160a01b031614155b610760576040805162461bcd60e51b8152602060048201526013602482015272467374737761703a20494e56414c49445f544f60681b604482015290519081900360640190fd5b8a1561077157610771828a8d6118e2565b891561078257610782818a8c6118e2565b861561083d57886001600160a01b03166388f9eddd338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088357600080fd5b505afa158015610897573d6000803e3d6000fd5b505050506040513d60208110156108ad57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108f957600080fd5b505afa15801561090d573d6000803e3d6000fd5b505050506040513d602081101561092357600080fd5b5051925060009150506001600160701b0385168a90038311610946576000610955565b89856001600160701b03160383035b9050600089856001600160701b0316038311610972576000610981565b89856001600160701b03160383035b905060008211806109925750600081115b6109cd5760405162461bcd60e51b81526004018080602001828103825260228152602001806122006022913960400191505060405180910390fd5b6000610a016109e384600363ffffffff611a7c16565b6109f5876103e863ffffffff611a7c16565b9063ffffffff611adf16565b90506000610a196109e384600363ffffffff611a7c16565b9050610a4a620f4240610a3e6001600160701b038b8116908b1663ffffffff611a7c16565b9063ffffffff611a7c16565b610a5a838363ffffffff611a7c16565b1015610a9a576040805162461bcd60e51b815260206004820152600a602482015269467374737761703a204b60b01b604482015290519081900360640190fd5b5050610aa884848888611b2f565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b604051806040016040528060078152602001660467374537761760cc1b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b68338484611cf2565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c0c576001600160a01b0384166000908152600260209081526040808320338452909152902054610be7908363ffffffff611adf16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c17848484611d54565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610ca4576040805162461bcd60e51b81526020600482015260126024820152712339ba39bbb0b81d102327a92124a22222a760711b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d29576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580610d39610b31565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d8d57600080fd5b505afa158015610da1573d6000803e3d6000fd5b505050506040513d6020811015610db757600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e0a57600080fd5b505afa158015610e1e573d6000803e3d6000fd5b505050506040513d6020811015610e3457600080fd5b505190506000610e53836001600160701b03871663ffffffff611adf16565b90506000610e70836001600160701b03871663ffffffff611adf16565b90506000610e7e8787611e0e565b60005490915080610ebb57610ea76103e86109f5610ea2878763ffffffff611a7c16565b611f6c565b9850610eb660006103e8611fbe565b610f0a565b610f076001600160701b038916610ed8868463ffffffff611a7c16565b81610edf57fe5b046001600160701b038916610efa868563ffffffff611a7c16565b81610f0157fe5b04612054565b98505b60008911610f495760405162461bcd60e51b81526004018080602001828103825260268152602001806121916026913960400191505060405180910390fd5b610f538a8a611fbe565b610f5f86868a8a611b2f565b8115610f8f57600854610f8b906001600160701b0380821691600160701b90041663ffffffff611a7c16565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114611052576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580611062610b31565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156110be57600080fd5b505afa1580156110d2573d6000803e3d6000fd5b505050506040513d60208110156110e857600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561113657600080fd5b505afa15801561114a573d6000803e3d6000fd5b505050506040513d602081101561116057600080fd5b50513060009081526001602052604081205491925061117f8888611e0e565b60005490915080611196848763ffffffff611a7c16565b8161119d57fe5b049a50806111b1848663ffffffff611a7c16565b816111b857fe5b04995060008b1180156111cb575060008a115b6112065760405162461bcd60e51b81526004018080602001828103825260268152602001806121b76026913960400191505060405180910390fd5b611210308461206c565b61121b878d8d6118e2565b611226868d8c6118e2565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156112e257600080fd5b505afa1580156112f6573d6000803e3d6000fd5b505050506040513d602081101561130c57600080fd5b5051935061131c85858b8b611b2f565b811561134c57600854611348906001600160701b0380821691600160701b90041663ffffffff611a7c16565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600581526020016404673744c560dc1b81525081565b6000610b68338484611d54565b6103e881565b600c54600114611427576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926114d692859287926114d1926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561149957600080fd5b505afa1580156114ad573d6000803e3d6000fd5b505050506040513d60208110156114c357600080fd5b50519063ffffffff611adf16565b6118e2565b600854604080516370a0823160e01b8152306004820152905161153d92849287926114d192600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561149957600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156115ad576040805162461bcd60e51b815260206004820152601060248201526f119cdd1cddd85c0e881156141254915160821b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156116c8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906116fe5750886001600160a01b0316816001600160a01b0316145b61174f576040805162461bcd60e51b815260206004820152601a60248201527f467374737761703a20494e56414c49445f5349474e4154555245000000000000604482015290519081900360640190fd5b61175a898989611cf2565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c546001146117cb576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516118db926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d60208110156118bd57600080fd5b50516008546001600160701b0380821691600160701b900416611b2f565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831061198f5780518252601f199092019160209182019101611970565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119f1576040519150601f19603f3d011682016040523d82523d6000602084013e6119f6565b606091505b5091509150818015611a24575080511580611a245750808060200190516020811015611a2157600080fd5b50515b611a75576040805162461bcd60e51b815260206004820152601860248201527f467374737761703a205452414e534645525f4641494c45440000000000000000604482015290519081900360640190fd5b5050505050565b6000811580611a9757505080820282828281611a9457fe5b04145b610b6c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b6c576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611b4d57506001600160701b038311155b611b92576040805162461bcd60e51b8152602060048201526011602482015270467374737761703a204f564552464c4f5760781b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611bc257506001600160701b03841615155b8015611bd657506001600160701b03831615155b15611c47578063ffffffff16611c0485611bef8661210a565b6001600160e01b03169063ffffffff61211c16565b600980546001600160e01b03929092169290920201905563ffffffff8116611c2f84611bef8761210a565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d7d908263ffffffff611adf16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611db2908263ffffffff61214116565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5f57600080fd5b505afa158015611e73573d6000803e3d6000fd5b505050506040513d6020811015611e8957600080fd5b5051600b546001600160a01b038216158015945091925090611f58578015611f53576000611ecc610ea26001600160701b0388811690881663ffffffff611a7c16565b90506000611ed983611f6c565b905080821115611f50576000611f07611ef8848463ffffffff611adf16565b6000549063ffffffff611a7c16565b90506000611f2c83611f2086600563ffffffff611a7c16565b9063ffffffff61214116565b90506000818381611f3957fe5b0490508015611f4c57611f4c8782611fbe565b5050505b50505b611f64565b8015611f64576000600b555b505092915050565b60006003821115611faf575080600160028204015b81811015611fa957809150600281828581611f9857fe5b040181611fa157fe5b049050611f81565b50611fb9565b8115611fb9575060015b919050565b600054611fd1908263ffffffff61214116565b60009081556001600160a01b038316815260016020526040902054611ffc908263ffffffff61214116565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106120635781612065565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612095908263ffffffff611adf16565b6001600160a01b038316600090815260016020526040812091909155546120c2908263ffffffff611adf16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161213957fe5b049392505050565b80820182811015610b6c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe467374737761703a20494e53554646494349454e545f4c49515549444954595f4d494e544544467374737761703a20494e53554646494349454e545f4c49515549444954595f4255524e4544467374737761703a20494e53554646494349454e545f4f55545055545f414d4f554e54467374737761703a20494e53554646494349454e545f494e5055545f414d4f554e54a265627a7a723158202822d8fe01e6a29da94f10abe556dbb57bb83a110609755819fb6d26a2f6ef7764736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429","recompiledBytecode":"0x60806040526001600c5534801561001557600080fd5b506040514690806052612358823960408051918290036052018220828201825260078352660467374537761760cc1b6020938401528151808301835260018152603160f81b908401528151808401919091527f2e2427526d910de2123a0b0f244ea8df704150c27ef595dc96d7a33cd43d78a6818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612256806101026000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610b0e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b31565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b5b565b604080519115158252519081900360200190f35b610339610b72565b604080516001600160a01b039092168252519081900360200190f35b61035d610b81565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b87565b61035d610c21565b6103b5610c45565b6040805160ff9092168252519081900360200190f35b61035d610c4a565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c50565b61035d610cd2565b61035d610cd8565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610cde565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610fdc565b61035d610fee565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316610ff4565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611006565b6040805192835260208301919091528051918290030190f35b6102446113aa565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356113cb565b61035d6113d8565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166113de565b610339611547565b610339611556565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611565565b61035d600480360360408110156105a357600080fd5b506001600160a01b0381358116916020013516611765565b61023a611782565b600c5460011461060c576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c558415158061061f5750600084115b61065a5760405162461bcd60e51b81526004018080602001828103825260238152602001806121dd6023913960400191505060405180910390fd5b600080610665610b31565b5091509150816001600160701b03168710801561068a5750806001600160701b031686105b6106db576040805162461bcd60e51b815260206004820152601f60248201527f467374737761703a20494e53554646494349454e545f4c495155494449545900604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107195750806001600160a01b0316896001600160a01b031614155b610760576040805162461bcd60e51b8152602060048201526013602482015272467374737761703a20494e56414c49445f544f60681b604482015290519081900360640190fd5b8a1561077157610771828a8d6118e2565b891561078257610782818a8c6118e2565b861561083d57886001600160a01b03166388f9eddd338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088357600080fd5b505afa158015610897573d6000803e3d6000fd5b505050506040513d60208110156108ad57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108f957600080fd5b505afa15801561090d573d6000803e3d6000fd5b505050506040513d602081101561092357600080fd5b5051925060009150506001600160701b0385168a90038311610946576000610955565b89856001600160701b03160383035b9050600089856001600160701b0316038311610972576000610981565b89856001600160701b03160383035b905060008211806109925750600081115b6109cd5760405162461bcd60e51b81526004018080602001828103825260228152602001806122006022913960400191505060405180910390fd5b6000610a016109e384600363ffffffff611a7c16565b6109f5876103e863ffffffff611a7c16565b9063ffffffff611adf16565b90506000610a196109e384600363ffffffff611a7c16565b9050610a4a620f4240610a3e6001600160701b038b8116908b1663ffffffff611a7c16565b9063ffffffff611a7c16565b610a5a838363ffffffff611a7c16565b1015610a9a576040805162461bcd60e51b815260206004820152600a602482015269467374737761703a204b60b01b604482015290519081900360640190fd5b5050610aa884848888611b2f565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b604051806040016040528060078152602001660467374537761760cc1b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b68338484611cf2565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c0c576001600160a01b0384166000908152600260209081526040808320338452909152902054610be7908363ffffffff611adf16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c17848484611d54565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610ca4576040805162461bcd60e51b81526020600482015260126024820152712339ba39bbb0b81d102327a92124a22222a760711b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d29576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580610d39610b31565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d8d57600080fd5b505afa158015610da1573d6000803e3d6000fd5b505050506040513d6020811015610db757600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e0a57600080fd5b505afa158015610e1e573d6000803e3d6000fd5b505050506040513d6020811015610e3457600080fd5b505190506000610e53836001600160701b03871663ffffffff611adf16565b90506000610e70836001600160701b03871663ffffffff611adf16565b90506000610e7e8787611e0e565b60005490915080610ebb57610ea76103e86109f5610ea2878763ffffffff611a7c16565b611f6c565b9850610eb660006103e8611fbe565b610f0a565b610f076001600160701b038916610ed8868463ffffffff611a7c16565b81610edf57fe5b046001600160701b038916610efa868563ffffffff611a7c16565b81610f0157fe5b04612054565b98505b60008911610f495760405162461bcd60e51b81526004018080602001828103825260268152602001806121916026913960400191505060405180910390fd5b610f538a8a611fbe565b610f5f86868a8a611b2f565b8115610f8f57600854610f8b906001600160701b0380821691600160701b90041663ffffffff611a7c16565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114611052576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580611062610b31565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156110be57600080fd5b505afa1580156110d2573d6000803e3d6000fd5b505050506040513d60208110156110e857600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561113657600080fd5b505afa15801561114a573d6000803e3d6000fd5b505050506040513d602081101561116057600080fd5b50513060009081526001602052604081205491925061117f8888611e0e565b60005490915080611196848763ffffffff611a7c16565b8161119d57fe5b049a50806111b1848663ffffffff611a7c16565b816111b857fe5b04995060008b1180156111cb575060008a115b6112065760405162461bcd60e51b81526004018080602001828103825260268152602001806121b76026913960400191505060405180910390fd5b611210308461206c565b61121b878d8d6118e2565b611226868d8c6118e2565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156112e257600080fd5b505afa1580156112f6573d6000803e3d6000fd5b505050506040513d602081101561130c57600080fd5b5051935061131c85858b8b611b2f565b811561134c57600854611348906001600160701b0380821691600160701b90041663ffffffff611a7c16565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600581526020016404673744c560dc1b81525081565b6000610b68338484611d54565b6103e881565b600c54600114611427576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926114d692859287926114d1926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561149957600080fd5b505afa1580156114ad573d6000803e3d6000fd5b505050506040513d60208110156114c357600080fd5b50519063ffffffff611adf16565b6118e2565b600854604080516370a0823160e01b8152306004820152905161153d92849287926114d192600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561149957600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156115ad576040805162461bcd60e51b815260206004820152601060248201526f119cdd1cddd85c0e881156141254915160821b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156116c8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906116fe5750886001600160a01b0316816001600160a01b0316145b61174f576040805162461bcd60e51b815260206004820152601a60248201527f467374737761703a20494e56414c49445f5349474e4154555245000000000000604482015290519081900360640190fd5b61175a898989611cf2565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c546001146117cb576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516118db926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d60208110156118bd57600080fd5b50516008546001600160701b0380821691600160701b900416611b2f565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831061198f5780518252601f199092019160209182019101611970565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119f1576040519150601f19603f3d011682016040523d82523d6000602084013e6119f6565b606091505b5091509150818015611a24575080511580611a245750808060200190516020811015611a2157600080fd5b50515b611a75576040805162461bcd60e51b815260206004820152601860248201527f467374737761703a205452414e534645525f4641494c45440000000000000000604482015290519081900360640190fd5b5050505050565b6000811580611a9757505080820282828281611a9457fe5b04145b610b6c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b6c576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611b4d57506001600160701b038311155b611b92576040805162461bcd60e51b8152602060048201526011602482015270467374737761703a204f564552464c4f5760781b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611bc257506001600160701b03841615155b8015611bd657506001600160701b03831615155b15611c47578063ffffffff16611c0485611bef8661210a565b6001600160e01b03169063ffffffff61211c16565b600980546001600160e01b03929092169290920201905563ffffffff8116611c2f84611bef8761210a565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d7d908263ffffffff611adf16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611db2908263ffffffff61214116565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5f57600080fd5b505afa158015611e73573d6000803e3d6000fd5b505050506040513d6020811015611e8957600080fd5b5051600b546001600160a01b038216158015945091925090611f58578015611f53576000611ecc610ea26001600160701b0388811690881663ffffffff611a7c16565b90506000611ed983611f6c565b905080821115611f50576000611f07611ef8848463ffffffff611adf16565b6000549063ffffffff611a7c16565b90506000611f2c83611f2086600563ffffffff611a7c16565b9063ffffffff61214116565b90506000818381611f3957fe5b0490508015611f4c57611f4c8782611fbe565b5050505b50505b611f64565b8015611f64576000600b555b505092915050565b60006003821115611faf575080600160028204015b81811015611fa957809150600281828581611f9857fe5b040181611fa157fe5b049050611f81565b50611fb9565b8115611fb9575060015b919050565b600054611fd1908263ffffffff61214116565b60009081556001600160a01b038316815260016020526040902054611ffc908263ffffffff61214116565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106120635781612065565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612095908263ffffffff611adf16565b6001600160a01b038316600090815260016020526040812091909155546120c2908263ffffffff611adf16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161213957fe5b049392505050565b80820182811015610b6c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe467374737761703a20494e53554646494349454e545f4c49515549444954595f4d494e544544467374737761703a20494e53554646494349454e545f4c49515549444954595f4255524e4544467374737761703a20494e53554646494349454e545f4f55545055545f414d4f554e54467374737761703a20494e53554646494349454e545f494e5055545f414d4f554e54a265627a7a72315820671fc42a11dda6ff5436781e2701450bd1dada8998a9a282ffa4380eb0578ddd64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429","sourceMap":"10189:10867:0:-;;;11057:1;11030:28;;12387:60;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7270:135:0;;7170:7;;7270:135;;;;;;;;;;;;;;;;7440:4;;;;;;;;-1:-1:-1;;;7440:4:0;;;;;7475:10;;;;;;;;;;-1:-1:-1;;;7475:10:0;;;;7241:318;;;;;;;;;7424:22;7241:318;;;;7465:21;7241:318;;;;;;;;;;;7539:4;7241:318;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7241:318:0;;;;;;7217:353;;;;;;;;7198:16;:372;-1:-1:-1;12419:7:0;:20;;-1:-1:-1;;;;;;12419:20:0;12429:10;12419:20;;;10189:10867;;;;;;","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa265627a7a72315820671fc42a11dda6ff5436781e2701450bd1dada8998a9a282ffa4380eb0578ddd64736f6c63430005100032","offset":8996}},"transformations":[{"id":"1","type":"replace","offset":8996,"reason":"cborAuxdata"}],"transformationValues":{"cborAuxdata":{"1":"0xa265627a7a723158202822d8fe01e6a29da94f10abe556dbb57bb83a110609755819fb6d26a2f6ef7764736f6c63430005100032"}}},"runtimeBytecode":{"onchainBytecode":"0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610b0e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b31565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b5b565b604080519115158252519081900360200190f35b610339610b72565b604080516001600160a01b039092168252519081900360200190f35b61035d610b81565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b87565b61035d610c21565b6103b5610c45565b6040805160ff9092168252519081900360200190f35b61035d610c4a565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c50565b61035d610cd2565b61035d610cd8565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610cde565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610fdc565b61035d610fee565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316610ff4565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611006565b6040805192835260208301919091528051918290030190f35b6102446113aa565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356113cb565b61035d6113d8565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166113de565b610339611547565b610339611556565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611565565b61035d600480360360408110156105a357600080fd5b506001600160a01b0381358116916020013516611765565b61023a611782565b600c5460011461060c576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c558415158061061f5750600084115b61065a5760405162461bcd60e51b81526004018080602001828103825260238152602001806121dd6023913960400191505060405180910390fd5b600080610665610b31565b5091509150816001600160701b03168710801561068a5750806001600160701b031686105b6106db576040805162461bcd60e51b815260206004820152601f60248201527f467374737761703a20494e53554646494349454e545f4c495155494449545900604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107195750806001600160a01b0316896001600160a01b031614155b610760576040805162461bcd60e51b8152602060048201526013602482015272467374737761703a20494e56414c49445f544f60681b604482015290519081900360640190fd5b8a1561077157610771828a8d6118e2565b891561078257610782818a8c6118e2565b861561083d57886001600160a01b03166388f9eddd338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088357600080fd5b505afa158015610897573d6000803e3d6000fd5b505050506040513d60208110156108ad57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108f957600080fd5b505afa15801561090d573d6000803e3d6000fd5b505050506040513d602081101561092357600080fd5b5051925060009150506001600160701b0385168a90038311610946576000610955565b89856001600160701b03160383035b9050600089856001600160701b0316038311610972576000610981565b89856001600160701b03160383035b905060008211806109925750600081115b6109cd5760405162461bcd60e51b81526004018080602001828103825260228152602001806122006022913960400191505060405180910390fd5b6000610a016109e384600363ffffffff611a7c16565b6109f5876103e863ffffffff611a7c16565b9063ffffffff611adf16565b90506000610a196109e384600363ffffffff611a7c16565b9050610a4a620f4240610a3e6001600160701b038b8116908b1663ffffffff611a7c16565b9063ffffffff611a7c16565b610a5a838363ffffffff611a7c16565b1015610a9a576040805162461bcd60e51b815260206004820152600a602482015269467374737761703a204b60b01b604482015290519081900360640190fd5b5050610aa884848888611b2f565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b604051806040016040528060078152602001660467374537761760cc1b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b68338484611cf2565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c0c576001600160a01b0384166000908152600260209081526040808320338452909152902054610be7908363ffffffff611adf16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c17848484611d54565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610ca4576040805162461bcd60e51b81526020600482015260126024820152712339ba39bbb0b81d102327a92124a22222a760711b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d29576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580610d39610b31565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d8d57600080fd5b505afa158015610da1573d6000803e3d6000fd5b505050506040513d6020811015610db757600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e0a57600080fd5b505afa158015610e1e573d6000803e3d6000fd5b505050506040513d6020811015610e3457600080fd5b505190506000610e53836001600160701b03871663ffffffff611adf16565b90506000610e70836001600160701b03871663ffffffff611adf16565b90506000610e7e8787611e0e565b60005490915080610ebb57610ea76103e86109f5610ea2878763ffffffff611a7c16565b611f6c565b9850610eb660006103e8611fbe565b610f0a565b610f076001600160701b038916610ed8868463ffffffff611a7c16565b81610edf57fe5b046001600160701b038916610efa868563ffffffff611a7c16565b81610f0157fe5b04612054565b98505b60008911610f495760405162461bcd60e51b81526004018080602001828103825260268152602001806121916026913960400191505060405180910390fd5b610f538a8a611fbe565b610f5f86868a8a611b2f565b8115610f8f57600854610f8b906001600160701b0380821691600160701b90041663ffffffff611a7c16565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114611052576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580611062610b31565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156110be57600080fd5b505afa1580156110d2573d6000803e3d6000fd5b505050506040513d60208110156110e857600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561113657600080fd5b505afa15801561114a573d6000803e3d6000fd5b505050506040513d602081101561116057600080fd5b50513060009081526001602052604081205491925061117f8888611e0e565b60005490915080611196848763ffffffff611a7c16565b8161119d57fe5b049a50806111b1848663ffffffff611a7c16565b816111b857fe5b04995060008b1180156111cb575060008a115b6112065760405162461bcd60e51b81526004018080602001828103825260268152602001806121b76026913960400191505060405180910390fd5b611210308461206c565b61121b878d8d6118e2565b611226868d8c6118e2565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156112e257600080fd5b505afa1580156112f6573d6000803e3d6000fd5b505050506040513d602081101561130c57600080fd5b5051935061131c85858b8b611b2f565b811561134c57600854611348906001600160701b0380821691600160701b90041663ffffffff611a7c16565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600581526020016404673744c560dc1b81525081565b6000610b68338484611d54565b6103e881565b600c54600114611427576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926114d692859287926114d1926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561149957600080fd5b505afa1580156114ad573d6000803e3d6000fd5b505050506040513d60208110156114c357600080fd5b50519063ffffffff611adf16565b6118e2565b600854604080516370a0823160e01b8152306004820152905161153d92849287926114d192600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561149957600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156115ad576040805162461bcd60e51b815260206004820152601060248201526f119cdd1cddd85c0e881156141254915160821b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156116c8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906116fe5750886001600160a01b0316816001600160a01b0316145b61174f576040805162461bcd60e51b815260206004820152601a60248201527f467374737761703a20494e56414c49445f5349474e4154555245000000000000604482015290519081900360640190fd5b61175a898989611cf2565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c546001146117cb576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516118db926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d60208110156118bd57600080fd5b50516008546001600160701b0380821691600160701b900416611b2f565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831061198f5780518252601f199092019160209182019101611970565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119f1576040519150601f19603f3d011682016040523d82523d6000602084013e6119f6565b606091505b5091509150818015611a24575080511580611a245750808060200190516020811015611a2157600080fd5b50515b611a75576040805162461bcd60e51b815260206004820152601860248201527f467374737761703a205452414e534645525f4641494c45440000000000000000604482015290519081900360640190fd5b5050505050565b6000811580611a9757505080820282828281611a9457fe5b04145b610b6c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b6c576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611b4d57506001600160701b038311155b611b92576040805162461bcd60e51b8152602060048201526011602482015270467374737761703a204f564552464c4f5760781b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611bc257506001600160701b03841615155b8015611bd657506001600160701b03831615155b15611c47578063ffffffff16611c0485611bef8661210a565b6001600160e01b03169063ffffffff61211c16565b600980546001600160e01b03929092169290920201905563ffffffff8116611c2f84611bef8761210a565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d7d908263ffffffff611adf16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611db2908263ffffffff61214116565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5f57600080fd5b505afa158015611e73573d6000803e3d6000fd5b505050506040513d6020811015611e8957600080fd5b5051600b546001600160a01b038216158015945091925090611f58578015611f53576000611ecc610ea26001600160701b0388811690881663ffffffff611a7c16565b90506000611ed983611f6c565b905080821115611f50576000611f07611ef8848463ffffffff611adf16565b6000549063ffffffff611a7c16565b90506000611f2c83611f2086600563ffffffff611a7c16565b9063ffffffff61214116565b90506000818381611f3957fe5b0490508015611f4c57611f4c8782611fbe565b5050505b50505b611f64565b8015611f64576000600b555b505092915050565b60006003821115611faf575080600160028204015b81811015611fa957809150600281828581611f9857fe5b040181611fa157fe5b049050611f81565b50611fb9565b8115611fb9575060015b919050565b600054611fd1908263ffffffff61214116565b60009081556001600160a01b038316815260016020526040902054611ffc908263ffffffff61214116565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106120635781612065565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612095908263ffffffff611adf16565b6001600160a01b038316600090815260016020526040812091909155546120c2908263ffffffff611adf16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161213957fe5b049392505050565b80820182811015610b6c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe467374737761703a20494e53554646494349454e545f4c49515549444954595f4d494e544544467374737761703a20494e53554646494349454e545f4c49515549444954595f4255524e4544467374737761703a20494e53554646494349454e545f4f55545055545f414d4f554e54467374737761703a20494e53554646494349454e545f494e5055545f414d4f554e54a265627a7a723158202822d8fe01e6a29da94f10abe556dbb57bb83a110609755819fb6d26a2f6ef7764736f6c63430005100032","recompiledBytecode":"0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610b0e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b31565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b5b565b604080519115158252519081900360200190f35b610339610b72565b604080516001600160a01b039092168252519081900360200190f35b61035d610b81565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b87565b61035d610c21565b6103b5610c45565b6040805160ff9092168252519081900360200190f35b61035d610c4a565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c50565b61035d610cd2565b61035d610cd8565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610cde565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610fdc565b61035d610fee565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316610ff4565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611006565b6040805192835260208301919091528051918290030190f35b6102446113aa565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356113cb565b61035d6113d8565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166113de565b610339611547565b610339611556565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611565565b61035d600480360360408110156105a357600080fd5b506001600160a01b0381358116916020013516611765565b61023a611782565b600c5460011461060c576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c558415158061061f5750600084115b61065a5760405162461bcd60e51b81526004018080602001828103825260238152602001806121dd6023913960400191505060405180910390fd5b600080610665610b31565b5091509150816001600160701b03168710801561068a5750806001600160701b031686105b6106db576040805162461bcd60e51b815260206004820152601f60248201527f467374737761703a20494e53554646494349454e545f4c495155494449545900604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107195750806001600160a01b0316896001600160a01b031614155b610760576040805162461bcd60e51b8152602060048201526013602482015272467374737761703a20494e56414c49445f544f60681b604482015290519081900360640190fd5b8a1561077157610771828a8d6118e2565b891561078257610782818a8c6118e2565b861561083d57886001600160a01b03166388f9eddd338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088357600080fd5b505afa158015610897573d6000803e3d6000fd5b505050506040513d60208110156108ad57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108f957600080fd5b505afa15801561090d573d6000803e3d6000fd5b505050506040513d602081101561092357600080fd5b5051925060009150506001600160701b0385168a90038311610946576000610955565b89856001600160701b03160383035b9050600089856001600160701b0316038311610972576000610981565b89856001600160701b03160383035b905060008211806109925750600081115b6109cd5760405162461bcd60e51b81526004018080602001828103825260228152602001806122006022913960400191505060405180910390fd5b6000610a016109e384600363ffffffff611a7c16565b6109f5876103e863ffffffff611a7c16565b9063ffffffff611adf16565b90506000610a196109e384600363ffffffff611a7c16565b9050610a4a620f4240610a3e6001600160701b038b8116908b1663ffffffff611a7c16565b9063ffffffff611a7c16565b610a5a838363ffffffff611a7c16565b1015610a9a576040805162461bcd60e51b815260206004820152600a602482015269467374737761703a204b60b01b604482015290519081900360640190fd5b5050610aa884848888611b2f565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b604051806040016040528060078152602001660467374537761760cc1b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b68338484611cf2565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c0c576001600160a01b0384166000908152600260209081526040808320338452909152902054610be7908363ffffffff611adf16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c17848484611d54565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610ca4576040805162461bcd60e51b81526020600482015260126024820152712339ba39bbb0b81d102327a92124a22222a760711b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d29576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580610d39610b31565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d8d57600080fd5b505afa158015610da1573d6000803e3d6000fd5b505050506040513d6020811015610db757600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e0a57600080fd5b505afa158015610e1e573d6000803e3d6000fd5b505050506040513d6020811015610e3457600080fd5b505190506000610e53836001600160701b03871663ffffffff611adf16565b90506000610e70836001600160701b03871663ffffffff611adf16565b90506000610e7e8787611e0e565b60005490915080610ebb57610ea76103e86109f5610ea2878763ffffffff611a7c16565b611f6c565b9850610eb660006103e8611fbe565b610f0a565b610f076001600160701b038916610ed8868463ffffffff611a7c16565b81610edf57fe5b046001600160701b038916610efa868563ffffffff611a7c16565b81610f0157fe5b04612054565b98505b60008911610f495760405162461bcd60e51b81526004018080602001828103825260268152602001806121916026913960400191505060405180910390fd5b610f538a8a611fbe565b610f5f86868a8a611b2f565b8115610f8f57600854610f8b906001600160701b0380821691600160701b90041663ffffffff611a7c16565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114611052576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580611062610b31565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156110be57600080fd5b505afa1580156110d2573d6000803e3d6000fd5b505050506040513d60208110156110e857600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561113657600080fd5b505afa15801561114a573d6000803e3d6000fd5b505050506040513d602081101561116057600080fd5b50513060009081526001602052604081205491925061117f8888611e0e565b60005490915080611196848763ffffffff611a7c16565b8161119d57fe5b049a50806111b1848663ffffffff611a7c16565b816111b857fe5b04995060008b1180156111cb575060008a115b6112065760405162461bcd60e51b81526004018080602001828103825260268152602001806121b76026913960400191505060405180910390fd5b611210308461206c565b61121b878d8d6118e2565b611226868d8c6118e2565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156112e257600080fd5b505afa1580156112f6573d6000803e3d6000fd5b505050506040513d602081101561130c57600080fd5b5051935061131c85858b8b611b2f565b811561134c57600854611348906001600160701b0380821691600160701b90041663ffffffff611a7c16565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600581526020016404673744c560dc1b81525081565b6000610b68338484611d54565b6103e881565b600c54600114611427576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926114d692859287926114d1926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561149957600080fd5b505afa1580156114ad573d6000803e3d6000fd5b505050506040513d60208110156114c357600080fd5b50519063ffffffff611adf16565b6118e2565b600854604080516370a0823160e01b8152306004820152905161153d92849287926114d192600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561149957600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156115ad576040805162461bcd60e51b815260206004820152601060248201526f119cdd1cddd85c0e881156141254915160821b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156116c8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906116fe5750886001600160a01b0316816001600160a01b0316145b61174f576040805162461bcd60e51b815260206004820152601a60248201527f467374737761703a20494e56414c49445f5349474e4154555245000000000000604482015290519081900360640190fd5b61175a898989611cf2565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c546001146117cb576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516118db926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d60208110156118bd57600080fd5b50516008546001600160701b0380821691600160701b900416611b2f565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831061198f5780518252601f199092019160209182019101611970565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119f1576040519150601f19603f3d011682016040523d82523d6000602084013e6119f6565b606091505b5091509150818015611a24575080511580611a245750808060200190516020811015611a2157600080fd5b50515b611a75576040805162461bcd60e51b815260206004820152601860248201527f467374737761703a205452414e534645525f4641494c45440000000000000000604482015290519081900360640190fd5b5050505050565b6000811580611a9757505080820282828281611a9457fe5b04145b610b6c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b6c576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611b4d57506001600160701b038311155b611b92576040805162461bcd60e51b8152602060048201526011602482015270467374737761703a204f564552464c4f5760781b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611bc257506001600160701b03841615155b8015611bd657506001600160701b03831615155b15611c47578063ffffffff16611c0485611bef8661210a565b6001600160e01b03169063ffffffff61211c16565b600980546001600160e01b03929092169290920201905563ffffffff8116611c2f84611bef8761210a565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d7d908263ffffffff611adf16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611db2908263ffffffff61214116565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5f57600080fd5b505afa158015611e73573d6000803e3d6000fd5b505050506040513d6020811015611e8957600080fd5b5051600b546001600160a01b038216158015945091925090611f58578015611f53576000611ecc610ea26001600160701b0388811690881663ffffffff611a7c16565b90506000611ed983611f6c565b905080821115611f50576000611f07611ef8848463ffffffff611adf16565b6000549063ffffffff611a7c16565b90506000611f2c83611f2086600563ffffffff611a7c16565b9063ffffffff61214116565b90506000818381611f3957fe5b0490508015611f4c57611f4c8782611fbe565b5050505b50505b611f64565b8015611f64576000600b555b505092915050565b60006003821115611faf575080600160028204015b81811015611fa957809150600281828581611f9857fe5b040181611fa157fe5b049050611f81565b50611fb9565b8115611fb9575060015b919050565b600054611fd1908263ffffffff61214116565b60009081556001600160a01b038316815260016020526040902054611ffc908263ffffffff61214116565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106120635781612065565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612095908263ffffffff611adf16565b6001600160a01b038316600090815260016020526040812091909155546120c2908263ffffffff611adf16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161213957fe5b049392505050565b80820182811015610b6c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe467374737761703a20494e53554646494349454e545f4c49515549444954595f4d494e544544467374737761703a20494e53554646494349454e545f4c49515549444954595f4255524e4544467374737761703a20494e53554646494349454e545f4f55545055545f414d4f554e54467374737761703a20494e53554646494349454e545f494e5055545f414d4f554e54a265627a7a72315820671fc42a11dda6ff5436781e2701450bd1dada8998a9a282ffa4380eb0578ddd64736f6c63430005100032","sourceMap":"10189:10867:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10189:10867:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17931:2369;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17931:2369:0;;;;;;;;-1:-1:-1;;;;;17931:2369:0;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;17931:2369:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17931:2369:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;17931:2369:0;;-1:-1:-1;17931:2369:0;-1:-1:-1;17931:2369:0;:::i;:::-;;6271:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6271:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11207:313;;;:::i;:::-;;;;-1:-1:-1;;;;;11207:313:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8497:150;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8497:150:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10507:21;;;:::i;:::-;;;;-1:-1:-1;;;;;10507:21:0;;;;;;;;;;;;;;6405:26;;;:::i;:::-;;;;;;;;;;;;;;;;8805:373;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8805:373:0;;;;;;;;;;;;;;;;;:::i;6705:117::-;;;:::i;6363:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6562:31;;;:::i;12512:208::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12512:208:0;;;;;;;;;;:::i;10837:35::-;;;:::i;10879:::-;;;:::i;14904:1310::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14904:1310:0;-1:-1:-1;;;;;14904:1310:0;;:::i;6438:44::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6438:44:0;-1:-1:-1;;;;;6438:44:0;;:::i;10921:20::-;;;:::i;6829:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6829:41:0;-1:-1:-1;;;;;6829:41:0;;:::i;16326:1493::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16326:1493:0;-1:-1:-1;;;;;16326:1493:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6317:39;;;:::i;8655:142::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8655:142:0;;;;;;;;:::i;10316:49::-;;;:::i;20349:434::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20349:434:0;-1:-1:-1;;;;;20349:434:0;;:::i;10478:22::-;;;:::i;10535:21::-;;;:::i;9186:996::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;9186:996:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6489:64::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6489:64:0;;;;;;;;;;:::i;20832:221::-;;;:::i;17931:2369::-;11100:8;;11112:1;11100:13;11092:41;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;;;;11155:1;11144:8;:12;18108:14;;;;:32;;;18139:1;18126:10;:14;18108:32;18086:117;;;;-1:-1:-1;;;18086:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18215:17;18234;18257:13;:11;:13::i;:::-;18214:56;;;;;18331:9;-1:-1:-1;;;;;18318:22:0;:10;:22;:48;;;;;18357:9;-1:-1:-1;;;;;18344:22:0;:10;:22;18318:48;18296:129;;;;;-1:-1:-1;;;18296:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18593:6;;18632;;18438:16;;;;-1:-1:-1;;;;;18593:6:0;;;;18632;;;;18661:13;;;;;;;:30;;;18684:7;-1:-1:-1;;;;;18678:13:0;:2;-1:-1:-1;;;;;18678:13:0;;;18661:30;18653:62;;;;;-1:-1:-1;;;18653:62:0;;;;;;;;;;;;-1:-1:-1;;;18653:62:0;;;;;;;;;;;;;;;18734:14;;18730:58;;18750:38;18764:7;18773:2;18777:10;18750:13;:38::i;:::-;18841:14;;18837:58;;18857:38;18871:7;18880:2;18884:10;18857:13;:38::i;:::-;18948:15;;18944:213;;18997:2;-1:-1:-1;;;;;18982:30:0;;19035:10;19068;19101;19134:4;;18982:175;;;;;;;;;;;;;-1:-1:-1;;;;;18982:175:0;-1:-1:-1;;;;;18982:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;18982:175:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18982:175:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18982:175:0;;;;18944:213;19183:40;;;-1:-1:-1;;;19183:40:0;;19217:4;19183:40;;;;;;-1:-1:-1;;;;;19183:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19183:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19183:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19183:40:0;19249;;;-1:-1:-1;;;19249:40:0;;19283:4;19249:40;;;;;;19183;;-1:-1:-1;;;;;;19249:25:0;;;;;:40;;;;;19183;;19249;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19249:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19249:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19249:40:0;;-1:-1:-1;19311:17:0;;-1:-1:-1;;;;;;;19342:22:0;;;;;19331:33;;:101;;19431:1;19331:101;;;19404:10;19392:9;-1:-1:-1;;;;;19392:22:0;;19380:8;:35;19331:101;19311:121;;19443:17;19486:10;19474:9;-1:-1:-1;;;;;19474:22:0;;19463:8;:33;:101;;19563:1;19463:101;;;19536:10;19524:9;-1:-1:-1;;;;;19524:22:0;;19512:8;:35;19463:101;19443:121;;19609:1;19597:9;:13;:30;;;;19626:1;19614:9;:13;19597:30;19575:114;;;;-1:-1:-1;;;19575:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19792:24;19819:40;19842:16;:9;19856:1;19842:16;:13;:16;:::i;:::-;19819:18;:8;19832:4;19819:18;:12;:18;:::i;:::-;:22;:40;:22;:40;:::i;:::-;19792:67;-1:-1:-1;19874:24:0;19901:40;19924:16;:9;19938:1;19924:16;:13;:16;:::i;19901:40::-;19874:67;-1:-1:-1;20045:46:0;20083:7;20045:33;-1:-1:-1;;;;;20045:18:0;;;;:33;;;:22;:33;:::i;:::-;:37;:46;:37;:46;:::i;:::-;19982:38;:16;20003;19982:38;:20;:38;:::i;:::-;:109;;19956:181;;;;;-1:-1:-1;;;19956:181:0;;;;;;;;;;;;-1:-1:-1;;;19956:181:0;;;;;;;;;;;;;;;11167:1;;20161:49;20169:8;20179;20189:9;20200;20161:7;:49::i;:::-;20226:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20226:66:0;;;20231:10;;20226:66;;;;;;;;;-1:-1:-1;;11190:1:0;11179:8;:12;-1:-1:-1;;;;;;;;;17931:2369:0:o;6271:39::-;;;;;;;;;;;;;;-1:-1:-1;;;6271:39:0;;;;:::o;11207:313::-;11422:8;;-1:-1:-1;;;;;11422:8:0;;;;-1:-1:-1;;;11453:8:0;;;;;;-1:-1:-1;;;11494:18:0;;;;;11207:313::o;8497:150::-;8564:4;8581:36;8590:10;8602:7;8611:5;8581:8;:36::i;:::-;-1:-1:-1;8635:4:0;8497:150;;;;;:::o;10507:21::-;;;-1:-1:-1;;;;;10507:21:0;;:::o;6405:26::-;;;;:::o;8805:373::-;-1:-1:-1;;;;;8941:15:0;;8920:4;8941:15;;;:9;:15;;;;;;;;8957:10;8941:27;;;;;;;;-1:-1:-1;;8941:42:0;8937:175;;-1:-1:-1;;;;;9030:15:0;;;;;;:9;:15;;;;;;;;9046:10;9030:27;;;;;;;;:70;;9080:5;9030:70;:31;:70;:::i;:::-;-1:-1:-1;;;;;9000:15:0;;;;;;:9;:15;;;;;;;;9016:10;9000:27;;;;;;;:100;8937:175;9122:26;9132:4;9138:2;9142:5;9122:9;:26::i;:::-;-1:-1:-1;9166:4:0;8805:373;;;;;:::o;6705:117::-;6756:66;6705:117;:::o;6363:35::-;6396:2;6363:35;:::o;6562:31::-;;;;:::o;12512:208::-;12608:7;;-1:-1:-1;;;;;12608:7:0;12594:10;:21;12586:52;;;;;-1:-1:-1;;;12586:52:0;;;;;;;;;;;;-1:-1:-1;;;12586:52:0;;;;;;;;;;;;;;;12669:6;:16;;-1:-1:-1;;;;;12669:16:0;;;-1:-1:-1;;;;;;12669:16:0;;;;;;;12696:6;:16;;;;;;;;;;;12512:208::o;10837:35::-;;;;:::o;10879:::-;;;;:::o;14904:1310::-;14953:17;11100:8;;11112:1;11100:13;11092:41;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;;;;11155:1;11144:8;:12;;;11155:1;15026:13;:11;:13::i;:::-;-1:-1:-1;15091:6:0;;15084:39;;;-1:-1:-1;;;15084:39:0;;15117:4;15084:39;;;;;;14983:56;;-1:-1:-1;14983:56:0;;-1:-1:-1;15065:16:0;;-1:-1:-1;;;;;15091:6:0;;;;15084:24;;:39;;;;;;;;;;;;;;15091:6;15084:39;;;5:2:-1;;;;30:1;27;20:12;5:2;15084:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15084:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15084:39:0;15160:6;;15153:39;;;-1:-1:-1;;;15153:39:0;;15186:4;15153:39;;;;;;15084;;-1:-1:-1;15134:16:0;;-1:-1:-1;;;;;15160:6:0;;;;15153:24;;:39;;;;;15084;;15153;;;;;;;;15160:6;15153:39;;;5:2:-1;;;;30:1;27;20:12;5:2;15153:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15153:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15153:39:0;;-1:-1:-1;15203:15:0;15221:23;:8;-1:-1:-1;;;;;15221:23:0;;;:12;:23;:::i;:::-;15203:41;-1:-1:-1;15255:15:0;15273:23;:8;-1:-1:-1;;;;;15273:23:0;;;:12;:23;:::i;:::-;15255:41;;15309:10;15322:30;15331:9;15342;15322:8;:30::i;:::-;15363:20;15386:11;15309:43;;-1:-1:-1;15490:17:0;15486:402;;15536:54;10360:5;15536:31;15546:20;:7;15558;15546:20;:11;:20;:::i;:::-;15536:9;:31::i;:54::-;15524:66;;15605:36;15619:1;10360:5;15605;:36::i;:::-;15486:402;;;15741:135;-1:-1:-1;;;;;15768:37:0;;:25;:7;15780:12;15768:25;:11;:25;:::i;:::-;:37;;;;;;-1:-1:-1;;;;;15824:37:0;;:25;:7;15836:12;15824:25;:11;:25;:::i;:::-;:37;;;;;;15741:8;:135::i;:::-;15729:147;;15486:402;15918:1;15906:9;:13;15898:64;;;;-1:-1:-1;;;15898:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15973:20;15979:2;15983:9;15973:5;:20::i;:::-;16006:49;16014:8;16024;16034:9;16045;16006:7;:49::i;:::-;16070:5;16066:50;;;16107:8;;16085:31;;-1:-1:-1;;;;;16093:8:0;;;;-1:-1:-1;;;16107:8:0;;;16085:31;:21;:31;:::i;:::-;16077:5;:39;16066:50;16172:34;;;;;;;;;;;;;;16177:10;;16172:34;;;;;;;;-1:-1:-1;;11190:1:0;11179:8;:12;-1:-1:-1;14904:1310:0;;;-1:-1:-1;;;;;;14904:1310:0:o;6438:44::-;;;;;;;;;;;;;:::o;10921:20::-;;;;:::o;6829:41::-;;;;;;;;;;;;;:::o;16326:1493::-;16402:15;16419;11100:8;;11112:1;11100:13;11092:41;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;;;;11155:1;11144:8;:12;;;11155:1;16495:13;:11;:13::i;:::-;-1:-1:-1;16552:6:0;;16602;;16653:40;;;-1:-1:-1;;;16653:40:0;;16687:4;16653:40;;;;;;16452:56;;-1:-1:-1;16452:56:0;;-1:-1:-1;;;;;;16552:6:0;;;;16602;;;16534:15;;16552:6;;16653:25;;:40;;;;;;;;;;;;;;16552:6;16653:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16653:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16653:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16653:40:0;16723;;;-1:-1:-1;;;16723:40:0;;16757:4;16723:40;;;;;;16653;;-1:-1:-1;16704:16:0;;-1:-1:-1;;;;;16723:25:0;;;;;:40;;;;;16653;;16723;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16723:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16723:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16723:40:0;16812:4;16774:17;16794:24;;;:9;16723:40;16794:24;;;;;16723:40;;-1:-1:-1;16844:30:0;16853:9;16864;16844:8;:30::i;:::-;16885:20;16908:11;16831:43;;-1:-1:-1;16908:11:0;17018:23;:9;17032:8;17018:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;17151:12:0;17125:23;:9;17139:8;17125:23;:13;:23;:::i;:::-;:38;;;;;;17115:48;;17254:1;17244:7;:11;:26;;;;;17269:1;17259:7;:11;17244:26;17222:114;;;;-1:-1:-1;;;17222:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17347:31;17361:4;17368:9;17347:5;:31::i;:::-;17389:35;17403:7;17412:2;17416:7;17389:13;:35::i;:::-;17435;17449:7;17458:2;17462:7;17435:13;:35::i;:::-;17492:40;;;-1:-1:-1;;;17492:40:0;;17526:4;17492:40;;;;;;-1:-1:-1;;;;;17492:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17492:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17492:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17492:40:0;17554;;;-1:-1:-1;;;17554:40:0;;17588:4;17554:40;;;;;;17492;;-1:-1:-1;;;;;;17554:25:0;;;;;:40;;;;;17492;;17554;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17554:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17554:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17554:40:0;;-1:-1:-1;17607:49:0;17615:8;17554:40;17635:9;17646;17607:7;:49::i;:::-;17671:5;17667:50;;;17708:8;;17686:31;;-1:-1:-1;;;;;17694:8:0;;;;-1:-1:-1;;;17708:8:0;;;17686:31;:21;:31;:::i;:::-;17678:5;:39;17667:50;17773:38;;;;;;;;;;;;;;-1:-1:-1;;;;;17773:38:0;;;17778:10;;17773:38;;;;;;;;;;;11167:1;;;;;;;;;11190;11179:8;:12;;;;16326:1493;;;:::o;6317:39::-;;;;;;;;;;;;;;-1:-1:-1;;;6317:39:0;;;;:::o;8655:142::-;8718:4;8735:32;8745:10;8757:2;8761:5;8735:9;:32::i;10316:49::-;10360:5;10316:49;:::o;20349:434::-;11100:8;;11112:1;11100:13;11092:41;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;;;;11155:1;11144:8;:12;20418:6;;20468;;20612:8;;20567:40;;;-1:-1:-1;;;20567:40:0;;20601:4;20567:40;;;;;;-1:-1:-1;;;;;20418:6:0;;;;20468;;;;20500:132;;20418:6;;20550:2;;20567:54;;-1:-1:-1;;;;;20612:8:0;;20418:6;;20567:25;;:40;;;;;;;;;;;;;;;20418:6;20567:40;;;5:2:-1;;;;30:1;27;20:12;5:2;20567:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20567:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20567:40:0;;:54;:44;:54;:::i;:::-;20500:13;:132::i;:::-;20755:8;;20710:40;;;-1:-1:-1;;;20710:40:0;;20744:4;20710:40;;;;;;20643:132;;20671:7;;20693:2;;20710:54;;-1:-1:-1;;;20755:8:0;;-1:-1:-1;;;;;20755:8:0;;-1:-1:-1;;;;;20710:25:0;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;20643:132:0;-1:-1:-1;;11190:1:0;11179:8;:12;-1:-1:-1;20349:434:0:o;10478:22::-;;;-1:-1:-1;;;;;10478:22:0;;:::o;10535:21::-;;;-1:-1:-1;;;;;10535:21:0;;:::o;9186:996::-;9408:15;9396:8;:27;;9388:56;;;;;-1:-1:-1;;;9388:56:0;;;;;;;;;;;;-1:-1:-1;;;9388:56:0;;;;;;;;;;;;;;;9560:16;;-1:-1:-1;;;;;9804:13:0;;;9455:14;9804:13;;;:6;:13;;;;;;;;:15;;;;;;;;;9627:250;;6756:66;9627:250;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9627:250:0;;;;;9595:301;;;;;;-1:-1:-1;;;9496:415:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9496:415:0;;;;;;9472:450;;;;;;;;;9960:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9455:14;;9804:15;9960:26;;;;;-1:-1:-1;;9960:26:0;;;;;;;;;;9804:15;9960:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;9960:26:0;;-1:-1:-1;;9960:26:0;;;-1:-1:-1;;;;;;;10019:30:0;;;;;;:59;;;10073:5;-1:-1:-1;;;;;10053:25:0;:16;-1:-1:-1;;;;;10053:25:0;;10019:59;9997:135;;;;;-1:-1:-1;;;9997:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10143:31;10152:5;10159:7;10168:5;10143:8;:31::i;:::-;9186:996;;;;;;;;;:::o;6489:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;20832:221::-;11100:8;;11112:1;11100:13;11092:41;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;;;;11155:1;11144:8;:12;20902:6;;20895:39;;;-1:-1:-1;;;20895:39:0;;20928:4;20895:39;;;;;;20873:172;;-1:-1:-1;;;;;20902:6:0;;20895:24;;:39;;;;;;;;;;;;;;20902:6;20895:39;;;5:2:-1;;;;30:1;27;20:12;5:2;20895:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20895:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20895:39:0;20956:6;;20949:39;;;-1:-1:-1;;;20949:39:0;;20982:4;20949:39;;;;;;-1:-1:-1;;;;;20956:6:0;;;;20949:24;;:39;;;;;20895;;20949;;;;;;;;20956:6;20949:39;;;5:2:-1;;;;30:1;27;20:12;5:2;20949:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20949:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20949:39:0;21003:8;;-1:-1:-1;;;;;21003:8:0;;;;-1:-1:-1;;;21026:8:0;;;20873:7;:172::i;:::-;11190:1;11179:8;:12;20832:221::o;11528:383::-;10433:34;;;;;;;;;;;;;;;;;11707:43;;-1:-1:-1;;;;;11707:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11707:43:0;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;11682:79:0;;;;11647:12;;11661:17;;11682:10;;;11707:43;11682:79;;;25:18:-1;11682:79:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;11682:79:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;11646:115:0;;;;11794:7;:57;;;;-1:-1:-1;11806:11:0;;:16;;:44;;;11837:4;11826:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11826:24:0;11806:44;11772:131;;;;;-1:-1:-1;;;11772:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11528:383;;;;;:::o;21483:151::-;21541:9;21571:6;;;:30;;-1:-1:-1;;21586:5:0;;;21600:1;21595;21586:5;21595:1;21581:15;;;;;:20;21571:30;21563:63;;;;;-1:-1:-1;;;21563:63:0;;;;;;;;;;;;-1:-1:-1;;;21563:63:0;;;;;;;;;;;;;;21337:138;21430:5;;;21425:16;;;;21417:50;;;;;-1:-1:-1;;;21417:50:0;;;;;;;;;;;;-1:-1:-1;;;21417:50:0;;;;;;;;;;;;;;12805:1018;-1:-1:-1;;;;;12980:23:0;;;;;:50;;-1:-1:-1;;;;;;13007:23:0;;;12980:50;12958:117;;;;;-1:-1:-1;;;12958:117:0;;;;;;;;;;;;-1:-1:-1;;;12958:117:0;;;;;;;;;;;;;;;13190:18;;13117:23;:15;:23;;;-1:-1:-1;;;13190:18:0;;;;13173:35;;;13246:15;;;;;;:33;;-1:-1:-1;;;;;;13265:14:0;;;;13246:33;:51;;;;-1:-1:-1;;;;;;13283:14:0;;;;13246:51;13242:410;;;13489:11;13416:84;;13424:44;13458:9;13424:27;13441:9;13424:16;:27::i;:::-;-1:-1:-1;;;;;13424:33:0;;:44;:33;:44;:::i;:::-;13375:20;:125;;-1:-1:-1;;;;;13416:53:0;;;;:84;;;;13375:125;;;13556:84;;;13564:44;13598:9;13564:27;13581:9;13564:16;:27::i;:44::-;13515:20;:125;;-1:-1:-1;;;;;13556:53:0;;;;:84;;;;13515:125;;;13242:410;13662:8;:28;;-1:-1:-1;;13662:28:0;-1:-1:-1;;;;;13662:28:0;;;;;;;-1:-1:-1;;;;13701:28:0;-1:-1:-1;;;13701:28:0;;;;;;;;;-1:-1:-1;;;;;13740:35:0;-1:-1:-1;;;13740:35:0;;;;;;;;;13791:24;;;13796:8;;;13791:24;;13806:8;;;;;;;13791:24;;;;;;;;;;;;;;;;;12805:1018;;;;;;:::o;8018:206::-;-1:-1:-1;;;;;8136:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;8185:31;;;;;;;;;;;;;;;;;8018:206;;;:::o;8232:257::-;-1:-1:-1;;;;;8363:15:0;;;;;;:9;:15;;;;;;:26;;8383:5;8363:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;8345:15:0;;;;;;;:9;:15;;;;;;:44;;;;8416:13;;;;;;;:24;;8434:5;8416:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;8400:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;8456:25;;;;;;;8400:13;;8456:25;;;;;;;;;;;;;8232:257;;;:::o;13913:879::-;14004:10;14032:13;14064:7;;;;;;;;;-1:-1:-1;;;;;14064:7:0;-1:-1:-1;;;;;14048:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14048:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14048:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14048:32:0;14146:5;;-1:-1:-1;;;;;14099:19:0;;;;;;-1:-1:-1;14048:32:0;;-1:-1:-1;14146:5:0;14177:608;;14207:11;;14203:512;;14239:13;14255:44;14265:33;-1:-1:-1;;;;;14265:18:0;;;;:33;;;:22;:33;:::i;14255:44::-;14239:60;;14318:17;14338;14348:6;14338:9;:17::i;:::-;14318:37;;14386:9;14378:5;:17;14374:326;;;14420:17;14440:37;14456:20;:5;14466:9;14456:20;:9;:20;:::i;:::-;14440:11;;;:37;:15;:37;:::i;:::-;14420:57;-1:-1:-1;14500:19:0;14522:27;14539:9;14522:12;:5;14532:1;14522:12;:9;:12;:::i;:::-;:16;:27;:16;:27;:::i;:::-;14500:49;;14572:17;14604:11;14592:9;:23;;;;;;;-1:-1:-1;14642:13:0;;14638:42;;14657:23;14663:5;14670:9;14657:5;:23::i;:::-;14374:326;;;;14203:512;;;14177:608;;;14736:11;;14732:53;;14772:1;14764:5;:9;14732:53;13913:879;;;;;;:::o;21939:312::-;21987:9;22017:1;22013;:5;22009:235;;;-1:-1:-1;22039:1:0;22075;22071;22067:5;;:9;22091:92;22102:1;22098;:5;22091:92;;;22128:1;22124:5;;22166:1;22161;22157;22153;:5;;;;;;:9;22152:15;;;;;;22148:19;;22091:92;;;22009:235;;;;22204:6;;22200:44;;-1:-1:-1;22231:1:0;22200:44;21939:312;;;:::o;7586:204::-;7662:11;;:22;;7678:5;7662:22;:15;:22;:::i;:::-;7648:11;:36;;;-1:-1:-1;;;;;7711:13:0;;;;:9;:13;;;;;;:24;;7729:5;7711:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;7695:13:0;;;;;;:9;:13;;;;;;;;:40;;;;7751:31;;;;;;;7695:13;;;;7751:31;;;;;;;;;;7586:204;;:::o;21716:105::-;21774:9;21804:1;21800;:5;:13;;21812:1;21800:13;;;21808:1;21800:13;21796:17;21716:105;-1:-1:-1;;;21716:105:0:o;7798:212::-;-1:-1:-1;;;;;7880:15:0;;;;;;:9;:15;;;;;;:26;;7900:5;7880:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;7862:15:0;;;;;;:9;:15;;;;;:44;;;;7931:11;:22;;7947:5;7931:22;:15;:22;:::i;:::-;7917:11;:36;;;7969:33;;;;;;;;-1:-1:-1;;;;;7969:33:0;;;;;;;;;;;;;7798:212;;:::o;22524:120::-;-1:-1:-1;;;;;22600:10:0;-1:-1:-1;;;22600:17:0;;22524:120::o;22715:108::-;22775:9;-1:-1:-1;;;;;22805:10:0;;-1:-1:-1;;;;;22801:14:0;;22805:10;22801:14;;;;;;22715:108;-1:-1:-1;;;22715:108:0:o;21192:137::-;21285:5;;;21280:16;;;;21272:49;;;;;-1:-1:-1;;;21272:49:0;;;;;;;;;;;;-1:-1:-1;;;21272:49:0;;;;;;;;;;;;;","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa265627a7a72315820671fc42a11dda6ff5436781e2701450bd1dada8998a9a282ffa4380eb0578ddd64736f6c63430005100032","offset":8738}},"immutableReferences":{},"transformations":[{"id":"1","type":"replace","offset":8738,"reason":"cborAuxdata"}],"transformationValues":{"cborAuxdata":{"1":"0xa265627a7a723158202822d8fe01e6a29da94f10abe556dbb57bb83a110609755819fb6d26a2f6ef7764736f6c63430005100032"}}},"deployment":{"transactionHash":"0xedb5ddfcf7b0f20e60d8a5e107b496054476709b57991a5181b4942f51040ab6","blockNumber":"13724205","transactionIndex":"32","deployer":"0x4eDe2BCBD3E9224D049a3056888AB4489f2Eb792"},"sources":{"FstswapPair.sol":{"content":"pragma solidity =0.5.16;\r\n\r\ninterface IFstswapFactory {\r\n    event PairCreated(\r\n        address indexed token0,\r\n        address indexed token1,\r\n        address pair,\r\n        uint256\r\n    );\r\n\r\n    function feeTo() external view returns (address);\r\n\r\n    function feeToSetter() external view returns (address);\r\n\r\n    function getPair(address tokenA, address tokenB)\r\n        external\r\n        view\r\n        returns (address pair);\r\n\r\n    function allPairs(uint256) external view returns (address pair);\r\n\r\n    function allPairsLength() external view returns (uint256);\r\n\r\n    function createPair(address tokenA, address tokenB)\r\n        external\r\n        returns (address pair);\r\n\r\n    function setFeeTo(address) external;\r\n\r\n    function setFeeToSetter(address) external;\r\n}\r\n\r\ninterface IFstswapPair {\r\n    event Approval(\r\n        address indexed owner,\r\n        address indexed spender,\r\n        uint256 value\r\n    );\r\n    event Transfer(address indexed from, address indexed to, uint256 value);\r\n\r\n    function name() external pure returns (string memory);\r\n\r\n    function symbol() external pure returns (string memory);\r\n\r\n    function decimals() external pure returns (uint8);\r\n\r\n    function totalSupply() external view returns (uint256);\r\n\r\n    function balanceOf(address owner) external view returns (uint256);\r\n\r\n    function allowance(address owner, address spender)\r\n        external\r\n        view\r\n        returns (uint256);\r\n\r\n    function approve(address spender, uint256 value) external returns (bool);\r\n\r\n    function transfer(address to, uint256 value) external returns (bool);\r\n\r\n    function transferFrom(\r\n        address from,\r\n        address to,\r\n        uint256 value\r\n    ) external returns (bool);\r\n\r\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\r\n\r\n    function PERMIT_TYPEHASH() external pure returns (bytes32);\r\n\r\n    function nonces(address owner) external view returns (uint256);\r\n\r\n    function permit(\r\n        address owner,\r\n        address spender,\r\n        uint256 value,\r\n        uint256 deadline,\r\n        uint8 v,\r\n        bytes32 r,\r\n        bytes32 s\r\n    ) external;\r\n\r\n    event Mint(address indexed sender, uint256 amount0, uint256 amount1);\r\n    event Burn(\r\n        address indexed sender,\r\n        uint256 amount0,\r\n        uint256 amount1,\r\n        address indexed to\r\n    );\r\n    event Swap(\r\n        address indexed sender,\r\n        uint256 amount0In,\r\n        uint256 amount1In,\r\n        uint256 amount0Out,\r\n        uint256 amount1Out,\r\n        address indexed to\r\n    );\r\n    event Sync(uint112 reserve0, uint112 reserve1);\r\n\r\n    function MINIMUM_LIQUIDITY() external pure returns (uint256);\r\n\r\n    function factory() external view returns (address);\r\n\r\n    function token0() external view returns (address);\r\n\r\n    function token1() external view returns (address);\r\n\r\n    function getReserves()\r\n        external\r\n        view\r\n        returns (\r\n            uint112 reserve0,\r\n            uint112 reserve1,\r\n            uint32 blockTimestampLast\r\n        );\r\n\r\n    function price0CumulativeLast() external view returns (uint256);\r\n\r\n    function price1CumulativeLast() external view returns (uint256);\r\n\r\n    function kLast() external view returns (uint256);\r\n\r\n    function mint(address to) external returns (uint256 liquidity);\r\n\r\n    function burn(address to)\r\n        external\r\n        returns (uint256 amount0, uint256 amount1);\r\n\r\n    function swap(\r\n        uint256 amount0Out,\r\n        uint256 amount1Out,\r\n        address to,\r\n        bytes calldata data\r\n    ) external;\r\n\r\n    function skim(address to) external;\r\n\r\n    function sync() external;\r\n\r\n    function initialize(address, address) external;\r\n}\r\n\r\ninterface IFstswapERC20 {\r\n    event Approval(\r\n        address indexed owner,\r\n        address indexed spender,\r\n        uint256 value\r\n    );\r\n    event Transfer(address indexed from, address indexed to, uint256 value);\r\n\r\n    function name() external pure returns (string memory);\r\n\r\n    function symbol() external pure returns (string memory);\r\n\r\n    function decimals() external pure returns (uint8);\r\n\r\n    function totalSupply() external view returns (uint256);\r\n\r\n    function balanceOf(address owner) external view returns (uint256);\r\n\r\n    function allowance(address owner, address spender)\r\n        external\r\n        view\r\n        returns (uint256);\r\n\r\n    function approve(address spender, uint256 value) external returns (bool);\r\n\r\n    function transfer(address to, uint256 value) external returns (bool);\r\n\r\n    function transferFrom(\r\n        address from,\r\n        address to,\r\n        uint256 value\r\n    ) external returns (bool);\r\n\r\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\r\n\r\n    function PERMIT_TYPEHASH() external pure returns (bytes32);\r\n\r\n    function nonces(address owner) external view returns (uint256);\r\n\r\n    function permit(\r\n        address owner,\r\n        address spender,\r\n        uint256 value,\r\n        uint256 deadline,\r\n        uint8 v,\r\n        bytes32 r,\r\n        bytes32 s\r\n    ) external;\r\n}\r\n\r\ninterface IERC20 {\r\n    event Approval(\r\n        address indexed owner,\r\n        address indexed spender,\r\n        uint256 value\r\n    );\r\n    event Transfer(address indexed from, address indexed to, uint256 value);\r\n\r\n    function name() external view returns (string memory);\r\n\r\n    function symbol() external view returns (string memory);\r\n\r\n    function decimals() external view returns (uint8);\r\n\r\n    function totalSupply() external view returns (uint256);\r\n\r\n    function balanceOf(address owner) external view returns (uint256);\r\n\r\n    function allowance(address owner, address spender)\r\n        external\r\n        view\r\n        returns (uint256);\r\n\r\n    function approve(address spender, uint256 value) external returns (bool);\r\n\r\n    function transfer(address to, uint256 value) external returns (bool);\r\n\r\n    function transferFrom(\r\n        address from,\r\n        address to,\r\n        uint256 value\r\n    ) external returns (bool);\r\n}\r\n\r\ninterface IFstswapCallee {\r\n    function fstswapCall(\r\n        address sender,\r\n        uint256 amount0,\r\n        uint256 amount1,\r\n        bytes calldata data\r\n    ) external;\r\n}\r\n\r\ncontract FstswapERC20 is IFstswapERC20 {\r\n    using SafeMath for uint256;\r\n\r\n    string public constant name = \"FstSwap\";\r\n    string public constant symbol = \"FstLP\";\r\n    uint8 public constant decimals = 18;\r\n    uint256 public totalSupply;\r\n    mapping(address => uint256) public balanceOf;\r\n    mapping(address => mapping(address => uint256)) public allowance;\r\n\r\n    bytes32 public DOMAIN_SEPARATOR;\r\n    // keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\");\r\n    bytes32 public constant PERMIT_TYPEHASH =\r\n        0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;\r\n    mapping(address => uint256) public nonces;\r\n\r\n    event Approval(\r\n        address indexed owner,\r\n        address indexed spender,\r\n        uint256 value\r\n    );\r\n    event Transfer(address indexed from, address indexed to, uint256 value);\r\n\r\n    constructor() public {\r\n        uint256 chainId;\r\n        assembly {\r\n            chainId := chainid\r\n        }\r\n        DOMAIN_SEPARATOR = keccak256(\r\n            abi.encode(\r\n                keccak256(\r\n                    \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\r\n                ),\r\n                keccak256(bytes(name)),\r\n                keccak256(bytes(\"1\")),\r\n                chainId,\r\n                address(this)\r\n            )\r\n        );\r\n    }\r\n\r\n    function _mint(address to, uint256 value) internal {\r\n        totalSupply = totalSupply.add(value);\r\n        balanceOf[to] = balanceOf[to].add(value);\r\n        emit Transfer(address(0), to, value);\r\n    }\r\n\r\n    function _burn(address from, uint256 value) internal {\r\n        balanceOf[from] = balanceOf[from].sub(value);\r\n        totalSupply = totalSupply.sub(value);\r\n        emit Transfer(from, address(0), value);\r\n    }\r\n\r\n    function _approve(\r\n        address owner,\r\n        address spender,\r\n        uint256 value\r\n    ) private {\r\n        allowance[owner][spender] = value;\r\n        emit Approval(owner, spender, value);\r\n    }\r\n\r\n    function _transfer(\r\n        address from,\r\n        address to,\r\n        uint256 value\r\n    ) private {\r\n        balanceOf[from] = balanceOf[from].sub(value);\r\n        balanceOf[to] = balanceOf[to].add(value);\r\n        emit Transfer(from, to, value);\r\n    }\r\n\r\n    function approve(address spender, uint256 value) external returns (bool) {\r\n        _approve(msg.sender, spender, value);\r\n        return true;\r\n    }\r\n\r\n    function transfer(address to, uint256 value) external returns (bool) {\r\n        _transfer(msg.sender, to, value);\r\n        return true;\r\n    }\r\n\r\n    function transferFrom(\r\n        address from,\r\n        address to,\r\n        uint256 value\r\n    ) external returns (bool) {\r\n        if (allowance[from][msg.sender] != uint256(-1)) {\r\n            allowance[from][msg.sender] = allowance[from][msg.sender].sub(\r\n                value\r\n            );\r\n        }\r\n        _transfer(from, to, value);\r\n        return true;\r\n    }\r\n\r\n    function permit(\r\n        address owner,\r\n        address spender,\r\n        uint256 value,\r\n        uint256 deadline,\r\n        uint8 v,\r\n        bytes32 r,\r\n        bytes32 s\r\n    ) external {\r\n        require(deadline >= block.timestamp, \"Fstswap: EXPIRED\");\r\n        bytes32 digest = keccak256(\r\n            abi.encodePacked(\r\n                \"\\x19\\x01\",\r\n                DOMAIN_SEPARATOR,\r\n                keccak256(\r\n                    abi.encode(\r\n                        PERMIT_TYPEHASH,\r\n                        owner,\r\n                        spender,\r\n                        value,\r\n                        nonces[owner]++,\r\n                        deadline\r\n                    )\r\n                )\r\n            )\r\n        );\r\n        address recoveredAddress = ecrecover(digest, v, r, s);\r\n        require(\r\n            recoveredAddress != address(0) && recoveredAddress == owner,\r\n            \"Fstswap: INVALID_SIGNATURE\"\r\n        );\r\n        _approve(owner, spender, value);\r\n    }\r\n}\r\n\r\ncontract FstswapPair is IFstswapPair, FstswapERC20 {\r\n    using SafeMath for uint256;\r\n    using UQ112x112 for uint224;\r\n\r\n    uint256 public constant MINIMUM_LIQUIDITY = 10**3;\r\n    bytes4 private constant SELECTOR =\r\n        bytes4(keccak256(bytes(\"transfer(address,uint256)\")));\r\n\r\n    address public factory;\r\n    address public token0;\r\n    address public token1;\r\n\r\n    uint112 private reserve0; // uses single storage slot, accessible via getReserves\r\n    uint112 private reserve1; // uses single storage slot, accessible via getReserves\r\n    uint32 private blockTimestampLast; // uses single storage slot, accessible via getReserves\r\n\r\n    uint256 public price0CumulativeLast;\r\n    uint256 public price1CumulativeLast;\r\n    uint256 public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event\r\n\r\n    uint256 private unlocked = 1;\r\n    modifier lock() {\r\n        require(unlocked == 1, \"Fstswap: LOCKED\");\r\n        unlocked = 0;\r\n        _;\r\n        unlocked = 1;\r\n    }\r\n\r\n    function getReserves()\r\n        public\r\n        view\r\n        returns (\r\n            uint112 _reserve0,\r\n            uint112 _reserve1,\r\n            uint32 _blockTimestampLast\r\n        )\r\n    {\r\n        _reserve0 = reserve0;\r\n        _reserve1 = reserve1;\r\n        _blockTimestampLast = blockTimestampLast;\r\n    }\r\n\r\n    function _safeTransfer(\r\n        address token,\r\n        address to,\r\n        uint256 value\r\n    ) private {\r\n        (bool success, bytes memory data) = token.call(\r\n            abi.encodeWithSelector(SELECTOR, to, value)\r\n        );\r\n        require(\r\n            success && (data.length == 0 || abi.decode(data, (bool))),\r\n            \"Fstswap: TRANSFER_FAILED\"\r\n        );\r\n    }\r\n\r\n    event Mint(address indexed sender, uint256 amount0, uint256 amount1);\r\n    event Burn(\r\n        address indexed sender,\r\n        uint256 amount0,\r\n        uint256 amount1,\r\n        address indexed to\r\n    );\r\n    event Swap(\r\n        address indexed sender,\r\n        uint256 amount0In,\r\n        uint256 amount1In,\r\n        uint256 amount0Out,\r\n        uint256 amount1Out,\r\n        address indexed to\r\n    );\r\n    event Sync(uint112 reserve0, uint112 reserve1);\r\n\r\n    constructor() public {\r\n        factory = msg.sender;\r\n    }\r\n\r\n    // called once by the factory at time of deployment\r\n    function initialize(address _token0, address _token1) external {\r\n        require(msg.sender == factory, \"Fstswap: FORBIDDEN\"); // sufficient check\r\n        token0 = _token0;\r\n        token1 = _token1;\r\n    }\r\n\r\n    // update reserves and, on the first call per block, price accumulators\r\n    function _update(\r\n        uint256 balance0,\r\n        uint256 balance1,\r\n        uint112 _reserve0,\r\n        uint112 _reserve1\r\n    ) private {\r\n        require(\r\n            balance0 <= uint112(-1) && balance1 <= uint112(-1),\r\n            \"Fstswap: OVERFLOW\"\r\n        );\r\n        uint32 blockTimestamp = uint32(block.timestamp % 2**32);\r\n        uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired\r\n        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {\r\n            // * never overflows, and + overflow is desired\r\n            price0CumulativeLast +=\r\n                uint256(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) *\r\n                timeElapsed;\r\n            price1CumulativeLast +=\r\n                uint256(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) *\r\n                timeElapsed;\r\n        }\r\n        reserve0 = uint112(balance0);\r\n        reserve1 = uint112(balance1);\r\n        blockTimestampLast = blockTimestamp;\r\n        emit Sync(reserve0, reserve1);\r\n    }\r\n\r\n    // if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k)\r\n    function _mintFee(uint112 _reserve0, uint112 _reserve1)\r\n        private\r\n        returns (bool feeOn)\r\n    {\r\n        address feeTo = IFstswapFactory(factory).feeTo();\r\n        feeOn = feeTo != address(0);\r\n        uint256 _kLast = kLast; // gas savings\r\n        if (feeOn) {\r\n            if (_kLast != 0) {\r\n                uint256 rootK = Math.sqrt(uint256(_reserve0).mul(_reserve1));\r\n                uint256 rootKLast = Math.sqrt(_kLast);\r\n                if (rootK > rootKLast) {\r\n                    uint256 numerator = totalSupply.mul(rootK.sub(rootKLast));\r\n                    uint256 denominator = rootK.mul(5).add(rootKLast);\r\n                    uint256 liquidity = numerator / denominator;\r\n                    if (liquidity > 0) _mint(feeTo, liquidity);\r\n                }\r\n            }\r\n        } else if (_kLast != 0) {\r\n            kLast = 0;\r\n        }\r\n    }\r\n\r\n    // this low-level function should be called from a contract which performs important safety checks\r\n    function mint(address to) external lock returns (uint256 liquidity) {\r\n        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings\r\n        uint256 balance0 = IERC20(token0).balanceOf(address(this));\r\n        uint256 balance1 = IERC20(token1).balanceOf(address(this));\r\n        uint256 amount0 = balance0.sub(_reserve0);\r\n        uint256 amount1 = balance1.sub(_reserve1);\r\n\r\n        bool feeOn = _mintFee(_reserve0, _reserve1);\r\n        uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee\r\n        if (_totalSupply == 0) {\r\n            liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);\r\n            _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens\r\n        } else {\r\n            liquidity = Math.min(\r\n                amount0.mul(_totalSupply) / _reserve0,\r\n                amount1.mul(_totalSupply) / _reserve1\r\n            );\r\n        }\r\n        require(liquidity > 0, \"Fstswap: INSUFFICIENT_LIQUIDITY_MINTED\");\r\n        _mint(to, liquidity);\r\n\r\n        _update(balance0, balance1, _reserve0, _reserve1);\r\n        if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date\r\n        emit Mint(msg.sender, amount0, amount1);\r\n    }\r\n\r\n    // this low-level function should be called from a contract which performs important safety checks\r\n    function burn(address to)\r\n        external\r\n        lock\r\n        returns (uint256 amount0, uint256 amount1)\r\n    {\r\n        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings\r\n        address _token0 = token0; // gas savings\r\n        address _token1 = token1; // gas savings\r\n        uint256 balance0 = IERC20(_token0).balanceOf(address(this));\r\n        uint256 balance1 = IERC20(_token1).balanceOf(address(this));\r\n        uint256 liquidity = balanceOf[address(this)];\r\n\r\n        bool feeOn = _mintFee(_reserve0, _reserve1);\r\n        uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee\r\n        amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution\r\n        amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution\r\n        require(\r\n            amount0 > 0 && amount1 > 0,\r\n            \"Fstswap: INSUFFICIENT_LIQUIDITY_BURNED\"\r\n        );\r\n        _burn(address(this), liquidity);\r\n        _safeTransfer(_token0, to, amount0);\r\n        _safeTransfer(_token1, to, amount1);\r\n        balance0 = IERC20(_token0).balanceOf(address(this));\r\n        balance1 = IERC20(_token1).balanceOf(address(this));\r\n\r\n        _update(balance0, balance1, _reserve0, _reserve1);\r\n        if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date\r\n        emit Burn(msg.sender, amount0, amount1, to);\r\n    }\r\n\r\n    // this low-level function should be called from a contract which performs important safety checks\r\n    function swap(\r\n        uint256 amount0Out,\r\n        uint256 amount1Out,\r\n        address to,\r\n        bytes calldata data\r\n    ) external lock {\r\n        require(\r\n            amount0Out > 0 || amount1Out > 0,\r\n            \"Fstswap: INSUFFICIENT_OUTPUT_AMOUNT\"\r\n        );\r\n        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings\r\n        require(\r\n            amount0Out < _reserve0 && amount1Out < _reserve1,\r\n            \"Fstswap: INSUFFICIENT_LIQUIDITY\"\r\n        );\r\n\r\n        uint256 balance0;\r\n        uint256 balance1;\r\n        {\r\n            // scope for _token{0,1}, avoids stack too deep errors\r\n            address _token0 = token0;\r\n            address _token1 = token1;\r\n            require(to != _token0 && to != _token1, \"Fstswap: INVALID_TO\");\r\n            if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens\r\n            if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens\r\n            if (data.length > 0)\r\n                IFstswapCallee(to).fstswapCall(\r\n                    msg.sender,\r\n                    amount0Out,\r\n                    amount1Out,\r\n                    data\r\n                );\r\n            balance0 = IERC20(_token0).balanceOf(address(this));\r\n            balance1 = IERC20(_token1).balanceOf(address(this));\r\n        }\r\n        uint256 amount0In = balance0 > _reserve0 - amount0Out\r\n            ? balance0 - (_reserve0 - amount0Out)\r\n            : 0;\r\n        uint256 amount1In = balance1 > _reserve1 - amount1Out\r\n            ? balance1 - (_reserve1 - amount1Out)\r\n            : 0;\r\n        require(\r\n            amount0In > 0 || amount1In > 0,\r\n            \"Fstswap: INSUFFICIENT_INPUT_AMOUNT\"\r\n        );\r\n        {\r\n            // scope for reserve{0,1}Adjusted, avoids stack too deep errors\r\n            uint256 balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3));\r\n            uint256 balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3));\r\n            require(\r\n                balance0Adjusted.mul(balance1Adjusted) >=\r\n                    uint256(_reserve0).mul(_reserve1).mul(1000**2),\r\n                \"Fstswap: K\"\r\n            );\r\n        }\r\n\r\n        _update(balance0, balance1, _reserve0, _reserve1);\r\n        emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to);\r\n    }\r\n\r\n    // force balances to match reserves\r\n    function skim(address to) external lock {\r\n        address _token0 = token0; // gas savings\r\n        address _token1 = token1; // gas savings\r\n        _safeTransfer(\r\n            _token0,\r\n            to,\r\n            IERC20(_token0).balanceOf(address(this)).sub(reserve0)\r\n        );\r\n        _safeTransfer(\r\n            _token1,\r\n            to,\r\n            IERC20(_token1).balanceOf(address(this)).sub(reserve1)\r\n        );\r\n    }\r\n\r\n    // force reserves to match balances\r\n    function sync() external lock {\r\n        _update(\r\n            IERC20(token0).balanceOf(address(this)),\r\n            IERC20(token1).balanceOf(address(this)),\r\n            reserve0,\r\n            reserve1\r\n        );\r\n    }\r\n}\r\n\r\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\r\n\r\nlibrary SafeMath {\r\n    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\r\n        require((z = x + y) >= x, \"ds-math-add-overflow\");\r\n    }\r\n\r\n    function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\r\n        require((z = x - y) <= x, \"ds-math-sub-underflow\");\r\n    }\r\n\r\n    function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\r\n        require(y == 0 || (z = x * y) / y == x, \"ds-math-mul-overflow\");\r\n    }\r\n}\r\n\r\n// a library for performing various math operations\r\n\r\nlibrary Math {\r\n    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {\r\n        z = x < y ? x : y;\r\n    }\r\n\r\n    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)\r\n    function sqrt(uint256 y) internal pure returns (uint256 z) {\r\n        if (y > 3) {\r\n            z = y;\r\n            uint256 x = y / 2 + 1;\r\n            while (x < z) {\r\n                z = x;\r\n                x = (y / x + x) / 2;\r\n            }\r\n        } else if (y != 0) {\r\n            z = 1;\r\n        }\r\n    }\r\n}\r\n\r\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\r\n\r\n// range: [0, 2**112 - 1]\r\n// resolution: 1 / 2**112\r\n\r\nlibrary UQ112x112 {\r\n    uint224 constant Q112 = 2**112;\r\n\r\n    // encode a uint112 as a UQ112x112\r\n    function encode(uint112 y) internal pure returns (uint224 z) {\r\n        z = uint224(y) * Q112; // never overflows\r\n    }\r\n\r\n    // divide a UQ112x112 by a uint112, returning a UQ112x112\r\n    function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {\r\n        z = x / uint224(y);\r\n    }\r\n}"}},"compilation":{"language":"Solidity","compiler":"solc","compilerVersion":"0.5.16+commit.9c3226ce","compilerSettings":{"libraries":{},"optimizer":{"runs":200,"enabled":true}},"name":"FstswapPair","fullyQualifiedName":"FstswapPair.sol:FstswapPair"},"abi":[{"type":"constructor","inputs":[],"payable":false,"stateMutability":"nonpayable"},{"name":"Approval","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Burn","type":"event","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount0","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount1","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"to","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Mint","type":"event","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount0","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount1","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Swap","type":"event","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount0In","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount1In","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount0Out","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount1Out","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"to","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Sync","type":"event","inputs":[{"name":"reserve0","type":"uint112","indexed":false,"internalType":"uint112"},{"name":"reserve1","type":"uint112","indexed":false,"internalType":"uint112"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"DOMAIN_SEPARATOR","type":"function","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"MINIMUM_LIQUIDITY","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"PERMIT_TYPEHASH","type":"function","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"allowance","type":"function","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"approve","type":"function","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"burn","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"}],"outputs":[{"name":"amount0","type":"uint256","internalType":"uint256"},{"name":"amount1","type":"uint256","internalType":"uint256"}],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"decimals","type":"function","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"factory","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"getReserves","type":"function","inputs":[],"outputs":[{"name":"_reserve0","type":"uint112","internalType":"uint112"},{"name":"_reserve1","type":"uint112","internalType":"uint112"},{"name":"_blockTimestampLast","type":"uint32","internalType":"uint32"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"initialize","type":"function","inputs":[{"name":"_token0","type":"address","internalType":"address"},{"name":"_token1","type":"address","internalType":"address"}],"outputs":[],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"kLast","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"mint","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"}],"outputs":[{"name":"liquidity","type":"uint256","internalType":"uint256"}],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"nonces","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"permit","type":"function","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"price0CumulativeLast","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"price1CumulativeLast","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"skim","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"}],"outputs":[],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"swap","type":"function","inputs":[{"name":"amount0Out","type":"uint256","internalType":"uint256"},{"name":"amount1Out","type":"uint256","internalType":"uint256"},{"name":"to","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"sync","type":"function","inputs":[],"outputs":[],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"token0","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"token1","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"transfer","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"transferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"payable":false,"constant":false,"stateMutability":"nonpayable"}],"metadata":{"compiler":{"version":"0.5.16+commit.9c3226ce"},"language":"Solidity","output":{"abi":[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sync","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"devdoc":{"methods":{}},"userdoc":{"methods":{}}},"settings":{"compilationTarget":{"FstswapPair.sol":"FstswapPair"},"evmVersion":"istanbul","libraries":{},"optimizer":{"enabled":true,"runs":200},"remappings":[]},"sources":{"FstswapPair.sol":{"keccak256":"0x6b61c1b883e0cac8a7b28cfec054167332a8099c1b7375e7c660118e8c2e0b38","urls":["bzz-raw://b482e8aabead491a707393fb48bb27ce9b5bd1e2a465dd6125a2661b25519ed4","dweb:/ipfs/QmVLetEKCyKtRP4SdS1Nrpo8UvSbCwzBCbc2DTX33WEzTY"]}},"version":1},"storageLayout":{"types":{"t_uint32":{"label":"uint32","encoding":"inplace","numberOfBytes":"4"},"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_bytes32":{"label":"bytes32","encoding":"inplace","numberOfBytes":"32"},"t_uint112":{"label":"uint112","encoding":"inplace","numberOfBytes":"14"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"},"t_mapping(t_address,t_uint256)":{"key":"t_address","label":"mapping(address => uint256)","value":"t_uint256","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"key":"t_address","label":"mapping(address => mapping(address => uint256))","value":"t_mapping(t_address,t_uint256)","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_uint256","astId":528,"label":"totalSupply","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"1","type":"t_mapping(t_address,t_uint256)","astId":532,"label":"balanceOf","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"2","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))","astId":538,"label":"allowance","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"3","type":"t_bytes32","astId":540,"label":"DOMAIN_SEPARATOR","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"4","type":"t_mapping(t_address,t_uint256)","astId":547,"label":"nonces","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"5","type":"t_address","astId":919,"label":"factory","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"6","type":"t_address","astId":921,"label":"token0","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"7","type":"t_address","astId":923,"label":"token1","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"8","type":"t_uint112","astId":925,"label":"reserve0","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"8","type":"t_uint112","astId":927,"label":"reserve1","offset":14,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"8","type":"t_uint32","astId":929,"label":"blockTimestampLast","offset":28,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"9","type":"t_uint256","astId":931,"label":"price0CumulativeLast","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"10","type":"t_uint256","astId":933,"label":"price1CumulativeLast","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"11","type":"t_uint256","astId":935,"label":"kLast","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"12","type":"t_uint256","astId":938,"label":"unlocked","offset":0,"contract":"FstswapPair.sol:FstswapPair"}]},"transientStorageLayout":null,"userdoc":{"methods":{}},"devdoc":{"methods":{}},"sourceIds":{"FstswapPair.sol":{"id":0}},"additionalInput":null,"stdJsonInput":{"sources":{"FstswapPair.sol":{"content":"pragma solidity =0.5.16;\r\n\r\ninterface IFstswapFactory {\r\n    event PairCreated(\r\n        address indexed token0,\r\n        address indexed token1,\r\n        address pair,\r\n        uint256\r\n    );\r\n\r\n    function feeTo() external view returns (address);\r\n\r\n    function feeToSetter() external view returns (address);\r\n\r\n    function getPair(address tokenA, address tokenB)\r\n        external\r\n        view\r\n        returns (address pair);\r\n\r\n    function allPairs(uint256) external view returns (address pair);\r\n\r\n    function allPairsLength() external view returns (uint256);\r\n\r\n    function createPair(address tokenA, address tokenB)\r\n        external\r\n        returns (address pair);\r\n\r\n    function setFeeTo(address) external;\r\n\r\n    function setFeeToSetter(address) external;\r\n}\r\n\r\ninterface IFstswapPair {\r\n    event Approval(\r\n        address indexed owner,\r\n        address indexed spender,\r\n        uint256 value\r\n    );\r\n    event Transfer(address indexed from, address indexed to, uint256 value);\r\n\r\n    function name() external pure returns (string memory);\r\n\r\n    function symbol() external pure returns (string memory);\r\n\r\n    function decimals() external pure returns (uint8);\r\n\r\n    function totalSupply() external view returns (uint256);\r\n\r\n    function balanceOf(address owner) external view returns (uint256);\r\n\r\n    function allowance(address owner, address spender)\r\n        external\r\n        view\r\n        returns (uint256);\r\n\r\n    function approve(address spender, uint256 value) external returns (bool);\r\n\r\n    function transfer(address to, uint256 value) external returns (bool);\r\n\r\n    function transferFrom(\r\n        address from,\r\n        address to,\r\n        uint256 value\r\n    ) external returns (bool);\r\n\r\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\r\n\r\n    function PERMIT_TYPEHASH() external pure returns (bytes32);\r\n\r\n    function nonces(address owner) external view returns (uint256);\r\n\r\n    function permit(\r\n        address owner,\r\n        address spender,\r\n        uint256 value,\r\n        uint256 deadline,\r\n        uint8 v,\r\n        bytes32 r,\r\n        bytes32 s\r\n    ) external;\r\n\r\n    event Mint(address indexed sender, uint256 amount0, uint256 amount1);\r\n    event Burn(\r\n        address indexed sender,\r\n        uint256 amount0,\r\n        uint256 amount1,\r\n        address indexed to\r\n    );\r\n    event Swap(\r\n        address indexed sender,\r\n        uint256 amount0In,\r\n        uint256 amount1In,\r\n        uint256 amount0Out,\r\n        uint256 amount1Out,\r\n        address indexed to\r\n    );\r\n    event Sync(uint112 reserve0, uint112 reserve1);\r\n\r\n    function MINIMUM_LIQUIDITY() external pure returns (uint256);\r\n\r\n    function factory() external view returns (address);\r\n\r\n    function token0() external view returns (address);\r\n\r\n    function token1() external view returns (address);\r\n\r\n    function getReserves()\r\n        external\r\n        view\r\n        returns (\r\n            uint112 reserve0,\r\n            uint112 reserve1,\r\n            uint32 blockTimestampLast\r\n        );\r\n\r\n    function price0CumulativeLast() external view returns (uint256);\r\n\r\n    function price1CumulativeLast() external view returns (uint256);\r\n\r\n    function kLast() external view returns (uint256);\r\n\r\n    function mint(address to) external returns (uint256 liquidity);\r\n\r\n    function burn(address to)\r\n        external\r\n        returns (uint256 amount0, uint256 amount1);\r\n\r\n    function swap(\r\n        uint256 amount0Out,\r\n        uint256 amount1Out,\r\n        address to,\r\n        bytes calldata data\r\n    ) external;\r\n\r\n    function skim(address to) external;\r\n\r\n    function sync() external;\r\n\r\n    function initialize(address, address) external;\r\n}\r\n\r\ninterface IFstswapERC20 {\r\n    event Approval(\r\n        address indexed owner,\r\n        address indexed spender,\r\n        uint256 value\r\n    );\r\n    event Transfer(address indexed from, address indexed to, uint256 value);\r\n\r\n    function name() external pure returns (string memory);\r\n\r\n    function symbol() external pure returns (string memory);\r\n\r\n    function decimals() external pure returns (uint8);\r\n\r\n    function totalSupply() external view returns (uint256);\r\n\r\n    function balanceOf(address owner) external view returns (uint256);\r\n\r\n    function allowance(address owner, address spender)\r\n        external\r\n        view\r\n        returns (uint256);\r\n\r\n    function approve(address spender, uint256 value) external returns (bool);\r\n\r\n    function transfer(address to, uint256 value) external returns (bool);\r\n\r\n    function transferFrom(\r\n        address from,\r\n        address to,\r\n        uint256 value\r\n    ) external returns (bool);\r\n\r\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\r\n\r\n    function PERMIT_TYPEHASH() external pure returns (bytes32);\r\n\r\n    function nonces(address owner) external view returns (uint256);\r\n\r\n    function permit(\r\n        address owner,\r\n        address spender,\r\n        uint256 value,\r\n        uint256 deadline,\r\n        uint8 v,\r\n        bytes32 r,\r\n        bytes32 s\r\n    ) external;\r\n}\r\n\r\ninterface IERC20 {\r\n    event Approval(\r\n        address indexed owner,\r\n        address indexed spender,\r\n        uint256 value\r\n    );\r\n    event Transfer(address indexed from, address indexed to, uint256 value);\r\n\r\n    function name() external view returns (string memory);\r\n\r\n    function symbol() external view returns (string memory);\r\n\r\n    function decimals() external view returns (uint8);\r\n\r\n    function totalSupply() external view returns (uint256);\r\n\r\n    function balanceOf(address owner) external view returns (uint256);\r\n\r\n    function allowance(address owner, address spender)\r\n        external\r\n        view\r\n        returns (uint256);\r\n\r\n    function approve(address spender, uint256 value) external returns (bool);\r\n\r\n    function transfer(address to, uint256 value) external returns (bool);\r\n\r\n    function transferFrom(\r\n        address from,\r\n        address to,\r\n        uint256 value\r\n    ) external returns (bool);\r\n}\r\n\r\ninterface IFstswapCallee {\r\n    function fstswapCall(\r\n        address sender,\r\n        uint256 amount0,\r\n        uint256 amount1,\r\n        bytes calldata data\r\n    ) external;\r\n}\r\n\r\ncontract FstswapERC20 is IFstswapERC20 {\r\n    using SafeMath for uint256;\r\n\r\n    string public constant name = \"FstSwap\";\r\n    string public constant symbol = \"FstLP\";\r\n    uint8 public constant decimals = 18;\r\n    uint256 public totalSupply;\r\n    mapping(address => uint256) public balanceOf;\r\n    mapping(address => mapping(address => uint256)) public allowance;\r\n\r\n    bytes32 public DOMAIN_SEPARATOR;\r\n    // keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\");\r\n    bytes32 public constant PERMIT_TYPEHASH =\r\n        0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;\r\n    mapping(address => uint256) public nonces;\r\n\r\n    event Approval(\r\n        address indexed owner,\r\n        address indexed spender,\r\n        uint256 value\r\n    );\r\n    event Transfer(address indexed from, address indexed to, uint256 value);\r\n\r\n    constructor() public {\r\n        uint256 chainId;\r\n        assembly {\r\n            chainId := chainid\r\n        }\r\n        DOMAIN_SEPARATOR = keccak256(\r\n            abi.encode(\r\n                keccak256(\r\n                    \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\r\n                ),\r\n                keccak256(bytes(name)),\r\n                keccak256(bytes(\"1\")),\r\n                chainId,\r\n                address(this)\r\n            )\r\n        );\r\n    }\r\n\r\n    function _mint(address to, uint256 value) internal {\r\n        totalSupply = totalSupply.add(value);\r\n        balanceOf[to] = balanceOf[to].add(value);\r\n        emit Transfer(address(0), to, value);\r\n    }\r\n\r\n    function _burn(address from, uint256 value) internal {\r\n        balanceOf[from] = balanceOf[from].sub(value);\r\n        totalSupply = totalSupply.sub(value);\r\n        emit Transfer(from, address(0), value);\r\n    }\r\n\r\n    function _approve(\r\n        address owner,\r\n        address spender,\r\n        uint256 value\r\n    ) private {\r\n        allowance[owner][spender] = value;\r\n        emit Approval(owner, spender, value);\r\n    }\r\n\r\n    function _transfer(\r\n        address from,\r\n        address to,\r\n        uint256 value\r\n    ) private {\r\n        balanceOf[from] = balanceOf[from].sub(value);\r\n        balanceOf[to] = balanceOf[to].add(value);\r\n        emit Transfer(from, to, value);\r\n    }\r\n\r\n    function approve(address spender, uint256 value) external returns (bool) {\r\n        _approve(msg.sender, spender, value);\r\n        return true;\r\n    }\r\n\r\n    function transfer(address to, uint256 value) external returns (bool) {\r\n        _transfer(msg.sender, to, value);\r\n        return true;\r\n    }\r\n\r\n    function transferFrom(\r\n        address from,\r\n        address to,\r\n        uint256 value\r\n    ) external returns (bool) {\r\n        if (allowance[from][msg.sender] != uint256(-1)) {\r\n            allowance[from][msg.sender] = allowance[from][msg.sender].sub(\r\n                value\r\n            );\r\n        }\r\n        _transfer(from, to, value);\r\n        return true;\r\n    }\r\n\r\n    function permit(\r\n        address owner,\r\n        address spender,\r\n        uint256 value,\r\n        uint256 deadline,\r\n        uint8 v,\r\n        bytes32 r,\r\n        bytes32 s\r\n    ) external {\r\n        require(deadline >= block.timestamp, \"Fstswap: EXPIRED\");\r\n        bytes32 digest = keccak256(\r\n            abi.encodePacked(\r\n                \"\\x19\\x01\",\r\n                DOMAIN_SEPARATOR,\r\n                keccak256(\r\n                    abi.encode(\r\n                        PERMIT_TYPEHASH,\r\n                        owner,\r\n                        spender,\r\n                        value,\r\n                        nonces[owner]++,\r\n                        deadline\r\n                    )\r\n                )\r\n            )\r\n        );\r\n        address recoveredAddress = ecrecover(digest, v, r, s);\r\n        require(\r\n            recoveredAddress != address(0) && recoveredAddress == owner,\r\n            \"Fstswap: INVALID_SIGNATURE\"\r\n        );\r\n        _approve(owner, spender, value);\r\n    }\r\n}\r\n\r\ncontract FstswapPair is IFstswapPair, FstswapERC20 {\r\n    using SafeMath for uint256;\r\n    using UQ112x112 for uint224;\r\n\r\n    uint256 public constant MINIMUM_LIQUIDITY = 10**3;\r\n    bytes4 private constant SELECTOR =\r\n        bytes4(keccak256(bytes(\"transfer(address,uint256)\")));\r\n\r\n    address public factory;\r\n    address public token0;\r\n    address public token1;\r\n\r\n    uint112 private reserve0; // uses single storage slot, accessible via getReserves\r\n    uint112 private reserve1; // uses single storage slot, accessible via getReserves\r\n    uint32 private blockTimestampLast; // uses single storage slot, accessible via getReserves\r\n\r\n    uint256 public price0CumulativeLast;\r\n    uint256 public price1CumulativeLast;\r\n    uint256 public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event\r\n\r\n    uint256 private unlocked = 1;\r\n    modifier lock() {\r\n        require(unlocked == 1, \"Fstswap: LOCKED\");\r\n        unlocked = 0;\r\n        _;\r\n        unlocked = 1;\r\n    }\r\n\r\n    function getReserves()\r\n        public\r\n        view\r\n        returns (\r\n            uint112 _reserve0,\r\n            uint112 _reserve1,\r\n            uint32 _blockTimestampLast\r\n        )\r\n    {\r\n        _reserve0 = reserve0;\r\n        _reserve1 = reserve1;\r\n        _blockTimestampLast = blockTimestampLast;\r\n    }\r\n\r\n    function _safeTransfer(\r\n        address token,\r\n        address to,\r\n        uint256 value\r\n    ) private {\r\n        (bool success, bytes memory data) = token.call(\r\n            abi.encodeWithSelector(SELECTOR, to, value)\r\n        );\r\n        require(\r\n            success && (data.length == 0 || abi.decode(data, (bool))),\r\n            \"Fstswap: TRANSFER_FAILED\"\r\n        );\r\n    }\r\n\r\n    event Mint(address indexed sender, uint256 amount0, uint256 amount1);\r\n    event Burn(\r\n        address indexed sender,\r\n        uint256 amount0,\r\n        uint256 amount1,\r\n        address indexed to\r\n    );\r\n    event Swap(\r\n        address indexed sender,\r\n        uint256 amount0In,\r\n        uint256 amount1In,\r\n        uint256 amount0Out,\r\n        uint256 amount1Out,\r\n        address indexed to\r\n    );\r\n    event Sync(uint112 reserve0, uint112 reserve1);\r\n\r\n    constructor() public {\r\n        factory = msg.sender;\r\n    }\r\n\r\n    // called once by the factory at time of deployment\r\n    function initialize(address _token0, address _token1) external {\r\n        require(msg.sender == factory, \"Fstswap: FORBIDDEN\"); // sufficient check\r\n        token0 = _token0;\r\n        token1 = _token1;\r\n    }\r\n\r\n    // update reserves and, on the first call per block, price accumulators\r\n    function _update(\r\n        uint256 balance0,\r\n        uint256 balance1,\r\n        uint112 _reserve0,\r\n        uint112 _reserve1\r\n    ) private {\r\n        require(\r\n            balance0 <= uint112(-1) && balance1 <= uint112(-1),\r\n            \"Fstswap: OVERFLOW\"\r\n        );\r\n        uint32 blockTimestamp = uint32(block.timestamp % 2**32);\r\n        uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired\r\n        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {\r\n            // * never overflows, and + overflow is desired\r\n            price0CumulativeLast +=\r\n                uint256(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) *\r\n                timeElapsed;\r\n            price1CumulativeLast +=\r\n                uint256(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) *\r\n                timeElapsed;\r\n        }\r\n        reserve0 = uint112(balance0);\r\n        reserve1 = uint112(balance1);\r\n        blockTimestampLast = blockTimestamp;\r\n        emit Sync(reserve0, reserve1);\r\n    }\r\n\r\n    // if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k)\r\n    function _mintFee(uint112 _reserve0, uint112 _reserve1)\r\n        private\r\n        returns (bool feeOn)\r\n    {\r\n        address feeTo = IFstswapFactory(factory).feeTo();\r\n        feeOn = feeTo != address(0);\r\n        uint256 _kLast = kLast; // gas savings\r\n        if (feeOn) {\r\n            if (_kLast != 0) {\r\n                uint256 rootK = Math.sqrt(uint256(_reserve0).mul(_reserve1));\r\n                uint256 rootKLast = Math.sqrt(_kLast);\r\n                if (rootK > rootKLast) {\r\n                    uint256 numerator = totalSupply.mul(rootK.sub(rootKLast));\r\n                    uint256 denominator = rootK.mul(5).add(rootKLast);\r\n                    uint256 liquidity = numerator / denominator;\r\n                    if (liquidity > 0) _mint(feeTo, liquidity);\r\n                }\r\n            }\r\n        } else if (_kLast != 0) {\r\n            kLast = 0;\r\n        }\r\n    }\r\n\r\n    // this low-level function should be called from a contract which performs important safety checks\r\n    function mint(address to) external lock returns (uint256 liquidity) {\r\n        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings\r\n        uint256 balance0 = IERC20(token0).balanceOf(address(this));\r\n        uint256 balance1 = IERC20(token1).balanceOf(address(this));\r\n        uint256 amount0 = balance0.sub(_reserve0);\r\n        uint256 amount1 = balance1.sub(_reserve1);\r\n\r\n        bool feeOn = _mintFee(_reserve0, _reserve1);\r\n        uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee\r\n        if (_totalSupply == 0) {\r\n            liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);\r\n            _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens\r\n        } else {\r\n            liquidity = Math.min(\r\n                amount0.mul(_totalSupply) / _reserve0,\r\n                amount1.mul(_totalSupply) / _reserve1\r\n            );\r\n        }\r\n        require(liquidity > 0, \"Fstswap: INSUFFICIENT_LIQUIDITY_MINTED\");\r\n        _mint(to, liquidity);\r\n\r\n        _update(balance0, balance1, _reserve0, _reserve1);\r\n        if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date\r\n        emit Mint(msg.sender, amount0, amount1);\r\n    }\r\n\r\n    // this low-level function should be called from a contract which performs important safety checks\r\n    function burn(address to)\r\n        external\r\n        lock\r\n        returns (uint256 amount0, uint256 amount1)\r\n    {\r\n        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings\r\n        address _token0 = token0; // gas savings\r\n        address _token1 = token1; // gas savings\r\n        uint256 balance0 = IERC20(_token0).balanceOf(address(this));\r\n        uint256 balance1 = IERC20(_token1).balanceOf(address(this));\r\n        uint256 liquidity = balanceOf[address(this)];\r\n\r\n        bool feeOn = _mintFee(_reserve0, _reserve1);\r\n        uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee\r\n        amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution\r\n        amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution\r\n        require(\r\n            amount0 > 0 && amount1 > 0,\r\n            \"Fstswap: INSUFFICIENT_LIQUIDITY_BURNED\"\r\n        );\r\n        _burn(address(this), liquidity);\r\n        _safeTransfer(_token0, to, amount0);\r\n        _safeTransfer(_token1, to, amount1);\r\n        balance0 = IERC20(_token0).balanceOf(address(this));\r\n        balance1 = IERC20(_token1).balanceOf(address(this));\r\n\r\n        _update(balance0, balance1, _reserve0, _reserve1);\r\n        if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date\r\n        emit Burn(msg.sender, amount0, amount1, to);\r\n    }\r\n\r\n    // this low-level function should be called from a contract which performs important safety checks\r\n    function swap(\r\n        uint256 amount0Out,\r\n        uint256 amount1Out,\r\n        address to,\r\n        bytes calldata data\r\n    ) external lock {\r\n        require(\r\n            amount0Out > 0 || amount1Out > 0,\r\n            \"Fstswap: INSUFFICIENT_OUTPUT_AMOUNT\"\r\n        );\r\n        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings\r\n        require(\r\n            amount0Out < _reserve0 && amount1Out < _reserve1,\r\n            \"Fstswap: INSUFFICIENT_LIQUIDITY\"\r\n        );\r\n\r\n        uint256 balance0;\r\n        uint256 balance1;\r\n        {\r\n            // scope for _token{0,1}, avoids stack too deep errors\r\n            address _token0 = token0;\r\n            address _token1 = token1;\r\n            require(to != _token0 && to != _token1, \"Fstswap: INVALID_TO\");\r\n            if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens\r\n            if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens\r\n            if (data.length > 0)\r\n                IFstswapCallee(to).fstswapCall(\r\n                    msg.sender,\r\n                    amount0Out,\r\n                    amount1Out,\r\n                    data\r\n                );\r\n            balance0 = IERC20(_token0).balanceOf(address(this));\r\n            balance1 = IERC20(_token1).balanceOf(address(this));\r\n        }\r\n        uint256 amount0In = balance0 > _reserve0 - amount0Out\r\n            ? balance0 - (_reserve0 - amount0Out)\r\n            : 0;\r\n        uint256 amount1In = balance1 > _reserve1 - amount1Out\r\n            ? balance1 - (_reserve1 - amount1Out)\r\n            : 0;\r\n        require(\r\n            amount0In > 0 || amount1In > 0,\r\n            \"Fstswap: INSUFFICIENT_INPUT_AMOUNT\"\r\n        );\r\n        {\r\n            // scope for reserve{0,1}Adjusted, avoids stack too deep errors\r\n            uint256 balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3));\r\n            uint256 balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3));\r\n            require(\r\n                balance0Adjusted.mul(balance1Adjusted) >=\r\n                    uint256(_reserve0).mul(_reserve1).mul(1000**2),\r\n                \"Fstswap: K\"\r\n            );\r\n        }\r\n\r\n        _update(balance0, balance1, _reserve0, _reserve1);\r\n        emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to);\r\n    }\r\n\r\n    // force balances to match reserves\r\n    function skim(address to) external lock {\r\n        address _token0 = token0; // gas savings\r\n        address _token1 = token1; // gas savings\r\n        _safeTransfer(\r\n            _token0,\r\n            to,\r\n            IERC20(_token0).balanceOf(address(this)).sub(reserve0)\r\n        );\r\n        _safeTransfer(\r\n            _token1,\r\n            to,\r\n            IERC20(_token1).balanceOf(address(this)).sub(reserve1)\r\n        );\r\n    }\r\n\r\n    // force reserves to match balances\r\n    function sync() external lock {\r\n        _update(\r\n            IERC20(token0).balanceOf(address(this)),\r\n            IERC20(token1).balanceOf(address(this)),\r\n            reserve0,\r\n            reserve1\r\n        );\r\n    }\r\n}\r\n\r\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\r\n\r\nlibrary SafeMath {\r\n    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\r\n        require((z = x + y) >= x, \"ds-math-add-overflow\");\r\n    }\r\n\r\n    function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\r\n        require((z = x - y) <= x, \"ds-math-sub-underflow\");\r\n    }\r\n\r\n    function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\r\n        require(y == 0 || (z = x * y) / y == x, \"ds-math-mul-overflow\");\r\n    }\r\n}\r\n\r\n// a library for performing various math operations\r\n\r\nlibrary Math {\r\n    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {\r\n        z = x < y ? x : y;\r\n    }\r\n\r\n    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)\r\n    function sqrt(uint256 y) internal pure returns (uint256 z) {\r\n        if (y > 3) {\r\n            z = y;\r\n            uint256 x = y / 2 + 1;\r\n            while (x < z) {\r\n                z = x;\r\n                x = (y / x + x) / 2;\r\n            }\r\n        } else if (y != 0) {\r\n            z = 1;\r\n        }\r\n    }\r\n}\r\n\r\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\r\n\r\n// range: [0, 2**112 - 1]\r\n// resolution: 1 / 2**112\r\n\r\nlibrary UQ112x112 {\r\n    uint224 constant Q112 = 2**112;\r\n\r\n    // encode a uint112 as a UQ112x112\r\n    function encode(uint112 y) internal pure returns (uint224 z) {\r\n        z = uint224(y) * Q112; // never overflows\r\n    }\r\n\r\n    // divide a UQ112x112 by a uint112, returning a UQ112x112\r\n    function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {\r\n        z = x / uint224(y);\r\n    }\r\n}"}},"language":"Solidity","settings":{"libraries":{},"optimizer":{"runs":200,"enabled":true}}},"stdJsonOutput":{"sources":{"FstswapPair.sol":{"id":0}},"contracts":{"FstswapPair.sol":{"FstswapPair":{"abi":[{"type":"constructor","inputs":[],"payable":false,"stateMutability":"nonpayable"},{"name":"Approval","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Burn","type":"event","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount0","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount1","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"to","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Mint","type":"event","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount0","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount1","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Swap","type":"event","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount0In","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount1In","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount0Out","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount1Out","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"to","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Sync","type":"event","inputs":[{"name":"reserve0","type":"uint112","indexed":false,"internalType":"uint112"},{"name":"reserve1","type":"uint112","indexed":false,"internalType":"uint112"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"DOMAIN_SEPARATOR","type":"function","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"MINIMUM_LIQUIDITY","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"PERMIT_TYPEHASH","type":"function","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"allowance","type":"function","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"approve","type":"function","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"burn","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"}],"outputs":[{"name":"amount0","type":"uint256","internalType":"uint256"},{"name":"amount1","type":"uint256","internalType":"uint256"}],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"decimals","type":"function","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"factory","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"getReserves","type":"function","inputs":[],"outputs":[{"name":"_reserve0","type":"uint112","internalType":"uint112"},{"name":"_reserve1","type":"uint112","internalType":"uint112"},{"name":"_blockTimestampLast","type":"uint32","internalType":"uint32"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"initialize","type":"function","inputs":[{"name":"_token0","type":"address","internalType":"address"},{"name":"_token1","type":"address","internalType":"address"}],"outputs":[],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"kLast","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"mint","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"}],"outputs":[{"name":"liquidity","type":"uint256","internalType":"uint256"}],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"nonces","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"permit","type":"function","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"price0CumulativeLast","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"price1CumulativeLast","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"skim","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"}],"outputs":[],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"swap","type":"function","inputs":[{"name":"amount0Out","type":"uint256","internalType":"uint256"},{"name":"amount1Out","type":"uint256","internalType":"uint256"},{"name":"to","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"sync","type":"function","inputs":[],"outputs":[],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"token0","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"token1","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"transfer","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"transferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"payable":false,"constant":false,"stateMutability":"nonpayable"}],"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0In\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1In\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"reserve0\",\"type\":\"uint112\"},{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"reserve1\",\"type\":\"uint112\"}],\"name\":\"Sync\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MINIMUM_LIQUIDITY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"_reserve0\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"_reserve1\",\"type\":\"uint112\"},{\"internalType\":\"uint32\",\"name\":\"_blockTimestampLast\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token1\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"kLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"price0CumulativeLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"price1CumulativeLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"skim\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"sync\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"FstswapPair.sol\":\"FstswapPair\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"FstswapPair.sol\":{\"keccak256\":\"0x6b61c1b883e0cac8a7b28cfec054167332a8099c1b7375e7c660118e8c2e0b38\",\"urls\":[\"bzz-raw://b482e8aabead491a707393fb48bb27ce9b5bd1e2a465dd6125a2661b25519ed4\",\"dweb:/ipfs/QmVLetEKCyKtRP4SdS1Nrpo8UvSbCwzBCbc2DTX33WEzTY\"]}},\"version\":1}","userdoc":{"methods":{}},"devdoc":{"methods":{}},"storageLayout":{"types":{"t_uint32":{"label":"uint32","encoding":"inplace","numberOfBytes":"4"},"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_bytes32":{"label":"bytes32","encoding":"inplace","numberOfBytes":"32"},"t_uint112":{"label":"uint112","encoding":"inplace","numberOfBytes":"14"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"},"t_mapping(t_address,t_uint256)":{"key":"t_address","label":"mapping(address => uint256)","value":"t_uint256","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"key":"t_address","label":"mapping(address => mapping(address => uint256))","value":"t_mapping(t_address,t_uint256)","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_uint256","astId":528,"label":"totalSupply","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"1","type":"t_mapping(t_address,t_uint256)","astId":532,"label":"balanceOf","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"2","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))","astId":538,"label":"allowance","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"3","type":"t_bytes32","astId":540,"label":"DOMAIN_SEPARATOR","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"4","type":"t_mapping(t_address,t_uint256)","astId":547,"label":"nonces","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"5","type":"t_address","astId":919,"label":"factory","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"6","type":"t_address","astId":921,"label":"token0","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"7","type":"t_address","astId":923,"label":"token1","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"8","type":"t_uint112","astId":925,"label":"reserve0","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"8","type":"t_uint112","astId":927,"label":"reserve1","offset":14,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"8","type":"t_uint32","astId":929,"label":"blockTimestampLast","offset":28,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"9","type":"t_uint256","astId":931,"label":"price0CumulativeLast","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"10","type":"t_uint256","astId":933,"label":"price1CumulativeLast","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"11","type":"t_uint256","astId":935,"label":"kLast","offset":0,"contract":"FstswapPair.sol:FstswapPair"},{"slot":"12","type":"t_uint256","astId":938,"label":"unlocked","offset":0,"contract":"FstswapPair.sol:FstswapPair"}]},"transientStorageLayout":null,"evm":{"bytecode":{"object":"60806040526001600c5534801561001557600080fd5b506040514690806052612358823960408051918290036052018220828201825260078352660467374537761760cc1b6020938401528151808301835260018152603160f81b908401528151808401919091527f2e2427526d910de2123a0b0f244ea8df704150c27ef595dc96d7a33cd43d78a6818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612256806101026000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610b0e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b31565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b5b565b604080519115158252519081900360200190f35b610339610b72565b604080516001600160a01b039092168252519081900360200190f35b61035d610b81565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b87565b61035d610c21565b6103b5610c45565b6040805160ff9092168252519081900360200190f35b61035d610c4a565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c50565b61035d610cd2565b61035d610cd8565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610cde565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610fdc565b61035d610fee565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316610ff4565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611006565b6040805192835260208301919091528051918290030190f35b6102446113aa565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356113cb565b61035d6113d8565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166113de565b610339611547565b610339611556565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611565565b61035d600480360360408110156105a357600080fd5b506001600160a01b0381358116916020013516611765565b61023a611782565b600c5460011461060c576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c558415158061061f5750600084115b61065a5760405162461bcd60e51b81526004018080602001828103825260238152602001806121dd6023913960400191505060405180910390fd5b600080610665610b31565b5091509150816001600160701b03168710801561068a5750806001600160701b031686105b6106db576040805162461bcd60e51b815260206004820152601f60248201527f467374737761703a20494e53554646494349454e545f4c495155494449545900604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107195750806001600160a01b0316896001600160a01b031614155b610760576040805162461bcd60e51b8152602060048201526013602482015272467374737761703a20494e56414c49445f544f60681b604482015290519081900360640190fd5b8a1561077157610771828a8d6118e2565b891561078257610782818a8c6118e2565b861561083d57886001600160a01b03166388f9eddd338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088357600080fd5b505afa158015610897573d6000803e3d6000fd5b505050506040513d60208110156108ad57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108f957600080fd5b505afa15801561090d573d6000803e3d6000fd5b505050506040513d602081101561092357600080fd5b5051925060009150506001600160701b0385168a90038311610946576000610955565b89856001600160701b03160383035b9050600089856001600160701b0316038311610972576000610981565b89856001600160701b03160383035b905060008211806109925750600081115b6109cd5760405162461bcd60e51b81526004018080602001828103825260228152602001806122006022913960400191505060405180910390fd5b6000610a016109e384600363ffffffff611a7c16565b6109f5876103e863ffffffff611a7c16565b9063ffffffff611adf16565b90506000610a196109e384600363ffffffff611a7c16565b9050610a4a620f4240610a3e6001600160701b038b8116908b1663ffffffff611a7c16565b9063ffffffff611a7c16565b610a5a838363ffffffff611a7c16565b1015610a9a576040805162461bcd60e51b815260206004820152600a602482015269467374737761703a204b60b01b604482015290519081900360640190fd5b5050610aa884848888611b2f565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b604051806040016040528060078152602001660467374537761760cc1b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b68338484611cf2565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c0c576001600160a01b0384166000908152600260209081526040808320338452909152902054610be7908363ffffffff611adf16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c17848484611d54565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610ca4576040805162461bcd60e51b81526020600482015260126024820152712339ba39bbb0b81d102327a92124a22222a760711b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d29576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580610d39610b31565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d8d57600080fd5b505afa158015610da1573d6000803e3d6000fd5b505050506040513d6020811015610db757600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e0a57600080fd5b505afa158015610e1e573d6000803e3d6000fd5b505050506040513d6020811015610e3457600080fd5b505190506000610e53836001600160701b03871663ffffffff611adf16565b90506000610e70836001600160701b03871663ffffffff611adf16565b90506000610e7e8787611e0e565b60005490915080610ebb57610ea76103e86109f5610ea2878763ffffffff611a7c16565b611f6c565b9850610eb660006103e8611fbe565b610f0a565b610f076001600160701b038916610ed8868463ffffffff611a7c16565b81610edf57fe5b046001600160701b038916610efa868563ffffffff611a7c16565b81610f0157fe5b04612054565b98505b60008911610f495760405162461bcd60e51b81526004018080602001828103825260268152602001806121916026913960400191505060405180910390fd5b610f538a8a611fbe565b610f5f86868a8a611b2f565b8115610f8f57600854610f8b906001600160701b0380821691600160701b90041663ffffffff611a7c16565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114611052576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580611062610b31565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156110be57600080fd5b505afa1580156110d2573d6000803e3d6000fd5b505050506040513d60208110156110e857600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561113657600080fd5b505afa15801561114a573d6000803e3d6000fd5b505050506040513d602081101561116057600080fd5b50513060009081526001602052604081205491925061117f8888611e0e565b60005490915080611196848763ffffffff611a7c16565b8161119d57fe5b049a50806111b1848663ffffffff611a7c16565b816111b857fe5b04995060008b1180156111cb575060008a115b6112065760405162461bcd60e51b81526004018080602001828103825260268152602001806121b76026913960400191505060405180910390fd5b611210308461206c565b61121b878d8d6118e2565b611226868d8c6118e2565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156112e257600080fd5b505afa1580156112f6573d6000803e3d6000fd5b505050506040513d602081101561130c57600080fd5b5051935061131c85858b8b611b2f565b811561134c57600854611348906001600160701b0380821691600160701b90041663ffffffff611a7c16565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600581526020016404673744c560dc1b81525081565b6000610b68338484611d54565b6103e881565b600c54600114611427576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926114d692859287926114d1926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561149957600080fd5b505afa1580156114ad573d6000803e3d6000fd5b505050506040513d60208110156114c357600080fd5b50519063ffffffff611adf16565b6118e2565b600854604080516370a0823160e01b8152306004820152905161153d92849287926114d192600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561149957600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156115ad576040805162461bcd60e51b815260206004820152601060248201526f119cdd1cddd85c0e881156141254915160821b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156116c8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906116fe5750886001600160a01b0316816001600160a01b0316145b61174f576040805162461bcd60e51b815260206004820152601a60248201527f467374737761703a20494e56414c49445f5349474e4154555245000000000000604482015290519081900360640190fd5b61175a898989611cf2565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c546001146117cb576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516118db926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d60208110156118bd57600080fd5b50516008546001600160701b0380821691600160701b900416611b2f565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831061198f5780518252601f199092019160209182019101611970565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119f1576040519150601f19603f3d011682016040523d82523d6000602084013e6119f6565b606091505b5091509150818015611a24575080511580611a245750808060200190516020811015611a2157600080fd5b50515b611a75576040805162461bcd60e51b815260206004820152601860248201527f467374737761703a205452414e534645525f4641494c45440000000000000000604482015290519081900360640190fd5b5050505050565b6000811580611a9757505080820282828281611a9457fe5b04145b610b6c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b6c576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611b4d57506001600160701b038311155b611b92576040805162461bcd60e51b8152602060048201526011602482015270467374737761703a204f564552464c4f5760781b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611bc257506001600160701b03841615155b8015611bd657506001600160701b03831615155b15611c47578063ffffffff16611c0485611bef8661210a565b6001600160e01b03169063ffffffff61211c16565b600980546001600160e01b03929092169290920201905563ffffffff8116611c2f84611bef8761210a565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d7d908263ffffffff611adf16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611db2908263ffffffff61214116565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5f57600080fd5b505afa158015611e73573d6000803e3d6000fd5b505050506040513d6020811015611e8957600080fd5b5051600b546001600160a01b038216158015945091925090611f58578015611f53576000611ecc610ea26001600160701b0388811690881663ffffffff611a7c16565b90506000611ed983611f6c565b905080821115611f50576000611f07611ef8848463ffffffff611adf16565b6000549063ffffffff611a7c16565b90506000611f2c83611f2086600563ffffffff611a7c16565b9063ffffffff61214116565b90506000818381611f3957fe5b0490508015611f4c57611f4c8782611fbe565b5050505b50505b611f64565b8015611f64576000600b555b505092915050565b60006003821115611faf575080600160028204015b81811015611fa957809150600281828581611f9857fe5b040181611fa157fe5b049050611f81565b50611fb9565b8115611fb9575060015b919050565b600054611fd1908263ffffffff61214116565b60009081556001600160a01b038316815260016020526040902054611ffc908263ffffffff61214116565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106120635781612065565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612095908263ffffffff611adf16565b6001600160a01b038316600090815260016020526040812091909155546120c2908263ffffffff611adf16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161213957fe5b049392505050565b80820182811015610b6c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe467374737761703a20494e53554646494349454e545f4c49515549444954595f4d494e544544467374737761703a20494e53554646494349454e545f4c49515549444954595f4255524e4544467374737761703a20494e53554646494349454e545f4f55545055545f414d4f554e54467374737761703a20494e53554646494349454e545f494e5055545f414d4f554e54a265627a7a72315820671fc42a11dda6ff5436781e2701450bd1dada8998a9a282ffa4380eb0578ddd64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429","sourceMap":"10189:10867:0:-;;;11057:1;11030:28;;12387:60;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7270:135:0;;7170:7;;7270:135;;;;;;;;;;;;;;;;7440:4;;;;;;;;-1:-1:-1;;;7440:4:0;;;;;7475:10;;;;;;;;;;-1:-1:-1;;;7475:10:0;;;;7241:318;;;;;;;;;7424:22;7241:318;;;;7465:21;7241:318;;;;;;;;;;;7539:4;7241:318;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7241:318:0;;;;;;7217:353;;;;;;;;7198:16;:372;-1:-1:-1;12419:7:0;:20;;-1:-1:-1;;;;;;12419:20:0;12429:10;12419:20;;;10189:10867;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610b0e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b31565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b5b565b604080519115158252519081900360200190f35b610339610b72565b604080516001600160a01b039092168252519081900360200190f35b61035d610b81565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b87565b61035d610c21565b6103b5610c45565b6040805160ff9092168252519081900360200190f35b61035d610c4a565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c50565b61035d610cd2565b61035d610cd8565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610cde565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610fdc565b61035d610fee565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316610ff4565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611006565b6040805192835260208301919091528051918290030190f35b6102446113aa565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356113cb565b61035d6113d8565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166113de565b610339611547565b610339611556565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611565565b61035d600480360360408110156105a357600080fd5b506001600160a01b0381358116916020013516611765565b61023a611782565b600c5460011461060c576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c558415158061061f5750600084115b61065a5760405162461bcd60e51b81526004018080602001828103825260238152602001806121dd6023913960400191505060405180910390fd5b600080610665610b31565b5091509150816001600160701b03168710801561068a5750806001600160701b031686105b6106db576040805162461bcd60e51b815260206004820152601f60248201527f467374737761703a20494e53554646494349454e545f4c495155494449545900604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107195750806001600160a01b0316896001600160a01b031614155b610760576040805162461bcd60e51b8152602060048201526013602482015272467374737761703a20494e56414c49445f544f60681b604482015290519081900360640190fd5b8a1561077157610771828a8d6118e2565b891561078257610782818a8c6118e2565b861561083d57886001600160a01b03166388f9eddd338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088357600080fd5b505afa158015610897573d6000803e3d6000fd5b505050506040513d60208110156108ad57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108f957600080fd5b505afa15801561090d573d6000803e3d6000fd5b505050506040513d602081101561092357600080fd5b5051925060009150506001600160701b0385168a90038311610946576000610955565b89856001600160701b03160383035b9050600089856001600160701b0316038311610972576000610981565b89856001600160701b03160383035b905060008211806109925750600081115b6109cd5760405162461bcd60e51b81526004018080602001828103825260228152602001806122006022913960400191505060405180910390fd5b6000610a016109e384600363ffffffff611a7c16565b6109f5876103e863ffffffff611a7c16565b9063ffffffff611adf16565b90506000610a196109e384600363ffffffff611a7c16565b9050610a4a620f4240610a3e6001600160701b038b8116908b1663ffffffff611a7c16565b9063ffffffff611a7c16565b610a5a838363ffffffff611a7c16565b1015610a9a576040805162461bcd60e51b815260206004820152600a602482015269467374737761703a204b60b01b604482015290519081900360640190fd5b5050610aa884848888611b2f565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b604051806040016040528060078152602001660467374537761760cc1b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b68338484611cf2565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c0c576001600160a01b0384166000908152600260209081526040808320338452909152902054610be7908363ffffffff611adf16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c17848484611d54565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610ca4576040805162461bcd60e51b81526020600482015260126024820152712339ba39bbb0b81d102327a92124a22222a760711b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d29576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580610d39610b31565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d8d57600080fd5b505afa158015610da1573d6000803e3d6000fd5b505050506040513d6020811015610db757600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e0a57600080fd5b505afa158015610e1e573d6000803e3d6000fd5b505050506040513d6020811015610e3457600080fd5b505190506000610e53836001600160701b03871663ffffffff611adf16565b90506000610e70836001600160701b03871663ffffffff611adf16565b90506000610e7e8787611e0e565b60005490915080610ebb57610ea76103e86109f5610ea2878763ffffffff611a7c16565b611f6c565b9850610eb660006103e8611fbe565b610f0a565b610f076001600160701b038916610ed8868463ffffffff611a7c16565b81610edf57fe5b046001600160701b038916610efa868563ffffffff611a7c16565b81610f0157fe5b04612054565b98505b60008911610f495760405162461bcd60e51b81526004018080602001828103825260268152602001806121916026913960400191505060405180910390fd5b610f538a8a611fbe565b610f5f86868a8a611b2f565b8115610f8f57600854610f8b906001600160701b0380821691600160701b90041663ffffffff611a7c16565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114611052576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580611062610b31565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156110be57600080fd5b505afa1580156110d2573d6000803e3d6000fd5b505050506040513d60208110156110e857600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561113657600080fd5b505afa15801561114a573d6000803e3d6000fd5b505050506040513d602081101561116057600080fd5b50513060009081526001602052604081205491925061117f8888611e0e565b60005490915080611196848763ffffffff611a7c16565b8161119d57fe5b049a50806111b1848663ffffffff611a7c16565b816111b857fe5b04995060008b1180156111cb575060008a115b6112065760405162461bcd60e51b81526004018080602001828103825260268152602001806121b76026913960400191505060405180910390fd5b611210308461206c565b61121b878d8d6118e2565b611226868d8c6118e2565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156112e257600080fd5b505afa1580156112f6573d6000803e3d6000fd5b505050506040513d602081101561130c57600080fd5b5051935061131c85858b8b611b2f565b811561134c57600854611348906001600160701b0380821691600160701b90041663ffffffff611a7c16565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600581526020016404673744c560dc1b81525081565b6000610b68338484611d54565b6103e881565b600c54600114611427576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926114d692859287926114d1926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561149957600080fd5b505afa1580156114ad573d6000803e3d6000fd5b505050506040513d60208110156114c357600080fd5b50519063ffffffff611adf16565b6118e2565b600854604080516370a0823160e01b8152306004820152905161153d92849287926114d192600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561149957600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156115ad576040805162461bcd60e51b815260206004820152601060248201526f119cdd1cddd85c0e881156141254915160821b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156116c8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906116fe5750886001600160a01b0316816001600160a01b0316145b61174f576040805162461bcd60e51b815260206004820152601a60248201527f467374737761703a20494e56414c49445f5349474e4154555245000000000000604482015290519081900360640190fd5b61175a898989611cf2565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c546001146117cb576040805162461bcd60e51b815260206004820152600f60248201526e119cdd1cddd85c0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516118db926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d60208110156118bd57600080fd5b50516008546001600160701b0380821691600160701b900416611b2f565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831061198f5780518252601f199092019160209182019101611970565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119f1576040519150601f19603f3d011682016040523d82523d6000602084013e6119f6565b606091505b5091509150818015611a24575080511580611a245750808060200190516020811015611a2157600080fd5b50515b611a75576040805162461bcd60e51b815260206004820152601860248201527f467374737761703a205452414e534645525f4641494c45440000000000000000604482015290519081900360640190fd5b5050505050565b6000811580611a9757505080820282828281611a9457fe5b04145b610b6c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b6c576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611b4d57506001600160701b038311155b611b92576040805162461bcd60e51b8152602060048201526011602482015270467374737761703a204f564552464c4f5760781b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611bc257506001600160701b03841615155b8015611bd657506001600160701b03831615155b15611c47578063ffffffff16611c0485611bef8661210a565b6001600160e01b03169063ffffffff61211c16565b600980546001600160e01b03929092169290920201905563ffffffff8116611c2f84611bef8761210a565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d7d908263ffffffff611adf16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611db2908263ffffffff61214116565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5f57600080fd5b505afa158015611e73573d6000803e3d6000fd5b505050506040513d6020811015611e8957600080fd5b5051600b546001600160a01b038216158015945091925090611f58578015611f53576000611ecc610ea26001600160701b0388811690881663ffffffff611a7c16565b90506000611ed983611f6c565b905080821115611f50576000611f07611ef8848463ffffffff611adf16565b6000549063ffffffff611a7c16565b90506000611f2c83611f2086600563ffffffff611a7c16565b9063ffffffff61214116565b90506000818381611f3957fe5b0490508015611f4c57611f4c8782611fbe565b5050505b50505b611f64565b8015611f64576000600b555b505092915050565b60006003821115611faf575080600160028204015b81811015611fa957809150600281828581611f9857fe5b040181611fa157fe5b049050611f81565b50611fb9565b8115611fb9575060015b919050565b600054611fd1908263ffffffff61214116565b60009081556001600160a01b038316815260016020526040902054611ffc908263ffffffff61214116565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106120635781612065565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612095908263ffffffff611adf16565b6001600160a01b038316600090815260016020526040812091909155546120c2908263ffffffff611adf16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161213957fe5b049392505050565b80820182811015610b6c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe467374737761703a20494e53554646494349454e545f4c49515549444954595f4d494e544544467374737761703a20494e53554646494349454e545f4c49515549444954595f4255524e4544467374737761703a20494e53554646494349454e545f4f55545055545f414d4f554e54467374737761703a20494e53554646494349454e545f494e5055545f414d4f554e54a265627a7a72315820671fc42a11dda6ff5436781e2701450bd1dada8998a9a282ffa4380eb0578ddd64736f6c63430005100032","sourceMap":"10189:10867:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10189:10867:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17931:2369;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17931:2369:0;;;;;;;;-1:-1:-1;;;;;17931:2369:0;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;17931:2369:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17931:2369:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;17931:2369:0;;-1:-1:-1;17931:2369:0;-1:-1:-1;17931:2369:0;:::i;:::-;;6271:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6271:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11207:313;;;:::i;:::-;;;;-1:-1:-1;;;;;11207:313:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8497:150;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8497:150:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10507:21;;;:::i;:::-;;;;-1:-1:-1;;;;;10507:21:0;;;;;;;;;;;;;;6405:26;;;:::i;:::-;;;;;;;;;;;;;;;;8805:373;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8805:373:0;;;;;;;;;;;;;;;;;:::i;6705:117::-;;;:::i;6363:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6562:31;;;:::i;12512:208::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12512:208:0;;;;;;;;;;:::i;10837:35::-;;;:::i;10879:::-;;;:::i;14904:1310::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14904:1310:0;-1:-1:-1;;;;;14904:1310:0;;:::i;6438:44::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6438:44:0;-1:-1:-1;;;;;6438:44:0;;:::i;10921:20::-;;;:::i;6829:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6829:41:0;-1:-1:-1;;;;;6829:41:0;;:::i;16326:1493::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16326:1493:0;-1:-1:-1;;;;;16326:1493:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6317:39;;;:::i;8655:142::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8655:142:0;;;;;;;;:::i;10316:49::-;;;:::i;20349:434::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20349:434:0;-1:-1:-1;;;;;20349:434:0;;:::i;10478:22::-;;;:::i;10535:21::-;;;:::i;9186:996::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;9186:996:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6489:64::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6489:64:0;;;;;;;;;;:::i;20832:221::-;;;:::i;17931:2369::-;11100:8;;11112:1;11100:13;11092:41;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;;;;11155:1;11144:8;:12;18108:14;;;;:32;;;18139:1;18126:10;:14;18108:32;18086:117;;;;-1:-1:-1;;;18086:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18215:17;18234;18257:13;:11;:13::i;:::-;18214:56;;;;;18331:9;-1:-1:-1;;;;;18318:22:0;:10;:22;:48;;;;;18357:9;-1:-1:-1;;;;;18344:22:0;:10;:22;18318:48;18296:129;;;;;-1:-1:-1;;;18296:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18593:6;;18632;;18438:16;;;;-1:-1:-1;;;;;18593:6:0;;;;18632;;;;18661:13;;;;;;;:30;;;18684:7;-1:-1:-1;;;;;18678:13:0;:2;-1:-1:-1;;;;;18678:13:0;;;18661:30;18653:62;;;;;-1:-1:-1;;;18653:62:0;;;;;;;;;;;;-1:-1:-1;;;18653:62:0;;;;;;;;;;;;;;;18734:14;;18730:58;;18750:38;18764:7;18773:2;18777:10;18750:13;:38::i;:::-;18841:14;;18837:58;;18857:38;18871:7;18880:2;18884:10;18857:13;:38::i;:::-;18948:15;;18944:213;;18997:2;-1:-1:-1;;;;;18982:30:0;;19035:10;19068;19101;19134:4;;18982:175;;;;;;;;;;;;;-1:-1:-1;;;;;18982:175:0;-1:-1:-1;;;;;18982:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;18982:175:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18982:175:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18982:175:0;;;;18944:213;19183:40;;;-1:-1:-1;;;19183:40:0;;19217:4;19183:40;;;;;;-1:-1:-1;;;;;19183:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19183:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19183:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19183:40:0;19249;;;-1:-1:-1;;;19249:40:0;;19283:4;19249:40;;;;;;19183;;-1:-1:-1;;;;;;19249:25:0;;;;;:40;;;;;19183;;19249;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19249:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19249:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19249:40:0;;-1:-1:-1;19311:17:0;;-1:-1:-1;;;;;;;19342:22:0;;;;;19331:33;;:101;;19431:1;19331:101;;;19404:10;19392:9;-1:-1:-1;;;;;19392:22:0;;19380:8;:35;19331:101;19311:121;;19443:17;19486:10;19474:9;-1:-1:-1;;;;;19474:22:0;;19463:8;:33;:101;;19563:1;19463:101;;;19536:10;19524:9;-1:-1:-1;;;;;19524:22:0;;19512:8;:35;19463:101;19443:121;;19609:1;19597:9;:13;:30;;;;19626:1;19614:9;:13;19597:30;19575:114;;;;-1:-1:-1;;;19575:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19792:24;19819:40;19842:16;:9;19856:1;19842:16;:13;:16;:::i;:::-;19819:18;:8;19832:4;19819:18;:12;:18;:::i;:::-;:22;:40;:22;:40;:::i;:::-;19792:67;-1:-1:-1;19874:24:0;19901:40;19924:16;:9;19938:1;19924:16;:13;:16;:::i;19901:40::-;19874:67;-1:-1:-1;20045:46:0;20083:7;20045:33;-1:-1:-1;;;;;20045:18:0;;;;:33;;;:22;:33;:::i;:::-;:37;:46;:37;:46;:::i;:::-;19982:38;:16;20003;19982:38;:20;:38;:::i;:::-;:109;;19956:181;;;;;-1:-1:-1;;;19956:181:0;;;;;;;;;;;;-1:-1:-1;;;19956:181:0;;;;;;;;;;;;;;;11167:1;;20161:49;20169:8;20179;20189:9;20200;20161:7;:49::i;:::-;20226:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20226:66:0;;;20231:10;;20226:66;;;;;;;;;-1:-1:-1;;11190:1:0;11179:8;:12;-1:-1:-1;;;;;;;;;17931:2369:0:o;6271:39::-;;;;;;;;;;;;;;-1:-1:-1;;;6271:39:0;;;;:::o;11207:313::-;11422:8;;-1:-1:-1;;;;;11422:8:0;;;;-1:-1:-1;;;11453:8:0;;;;;;-1:-1:-1;;;11494:18:0;;;;;11207:313::o;8497:150::-;8564:4;8581:36;8590:10;8602:7;8611:5;8581:8;:36::i;:::-;-1:-1:-1;8635:4:0;8497:150;;;;;:::o;10507:21::-;;;-1:-1:-1;;;;;10507:21:0;;:::o;6405:26::-;;;;:::o;8805:373::-;-1:-1:-1;;;;;8941:15:0;;8920:4;8941:15;;;:9;:15;;;;;;;;8957:10;8941:27;;;;;;;;-1:-1:-1;;8941:42:0;8937:175;;-1:-1:-1;;;;;9030:15:0;;;;;;:9;:15;;;;;;;;9046:10;9030:27;;;;;;;;:70;;9080:5;9030:70;:31;:70;:::i;:::-;-1:-1:-1;;;;;9000:15:0;;;;;;:9;:15;;;;;;;;9016:10;9000:27;;;;;;;:100;8937:175;9122:26;9132:4;9138:2;9142:5;9122:9;:26::i;:::-;-1:-1:-1;9166:4:0;8805:373;;;;;:::o;6705:117::-;6756:66;6705:117;:::o;6363:35::-;6396:2;6363:35;:::o;6562:31::-;;;;:::o;12512:208::-;12608:7;;-1:-1:-1;;;;;12608:7:0;12594:10;:21;12586:52;;;;;-1:-1:-1;;;12586:52:0;;;;;;;;;;;;-1:-1:-1;;;12586:52:0;;;;;;;;;;;;;;;12669:6;:16;;-1:-1:-1;;;;;12669:16:0;;;-1:-1:-1;;;;;;12669:16:0;;;;;;;12696:6;:16;;;;;;;;;;;12512:208::o;10837:35::-;;;;:::o;10879:::-;;;;:::o;14904:1310::-;14953:17;11100:8;;11112:1;11100:13;11092:41;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;;;;11155:1;11144:8;:12;;;11155:1;15026:13;:11;:13::i;:::-;-1:-1:-1;15091:6:0;;15084:39;;;-1:-1:-1;;;15084:39:0;;15117:4;15084:39;;;;;;14983:56;;-1:-1:-1;14983:56:0;;-1:-1:-1;15065:16:0;;-1:-1:-1;;;;;15091:6:0;;;;15084:24;;:39;;;;;;;;;;;;;;15091:6;15084:39;;;5:2:-1;;;;30:1;27;20:12;5:2;15084:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15084:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15084:39:0;15160:6;;15153:39;;;-1:-1:-1;;;15153:39:0;;15186:4;15153:39;;;;;;15084;;-1:-1:-1;15134:16:0;;-1:-1:-1;;;;;15160:6:0;;;;15153:24;;:39;;;;;15084;;15153;;;;;;;;15160:6;15153:39;;;5:2:-1;;;;30:1;27;20:12;5:2;15153:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15153:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15153:39:0;;-1:-1:-1;15203:15:0;15221:23;:8;-1:-1:-1;;;;;15221:23:0;;;:12;:23;:::i;:::-;15203:41;-1:-1:-1;15255:15:0;15273:23;:8;-1:-1:-1;;;;;15273:23:0;;;:12;:23;:::i;:::-;15255:41;;15309:10;15322:30;15331:9;15342;15322:8;:30::i;:::-;15363:20;15386:11;15309:43;;-1:-1:-1;15490:17:0;15486:402;;15536:54;10360:5;15536:31;15546:20;:7;15558;15546:20;:11;:20;:::i;:::-;15536:9;:31::i;:54::-;15524:66;;15605:36;15619:1;10360:5;15605;:36::i;:::-;15486:402;;;15741:135;-1:-1:-1;;;;;15768:37:0;;:25;:7;15780:12;15768:25;:11;:25;:::i;:::-;:37;;;;;;-1:-1:-1;;;;;15824:37:0;;:25;:7;15836:12;15824:25;:11;:25;:::i;:::-;:37;;;;;;15741:8;:135::i;:::-;15729:147;;15486:402;15918:1;15906:9;:13;15898:64;;;;-1:-1:-1;;;15898:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15973:20;15979:2;15983:9;15973:5;:20::i;:::-;16006:49;16014:8;16024;16034:9;16045;16006:7;:49::i;:::-;16070:5;16066:50;;;16107:8;;16085:31;;-1:-1:-1;;;;;16093:8:0;;;;-1:-1:-1;;;16107:8:0;;;16085:31;:21;:31;:::i;:::-;16077:5;:39;16066:50;16172:34;;;;;;;;;;;;;;16177:10;;16172:34;;;;;;;;-1:-1:-1;;11190:1:0;11179:8;:12;-1:-1:-1;14904:1310:0;;;-1:-1:-1;;;;;;14904:1310:0:o;6438:44::-;;;;;;;;;;;;;:::o;10921:20::-;;;;:::o;6829:41::-;;;;;;;;;;;;;:::o;16326:1493::-;16402:15;16419;11100:8;;11112:1;11100:13;11092:41;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;;;;11155:1;11144:8;:12;;;11155:1;16495:13;:11;:13::i;:::-;-1:-1:-1;16552:6:0;;16602;;16653:40;;;-1:-1:-1;;;16653:40:0;;16687:4;16653:40;;;;;;16452:56;;-1:-1:-1;16452:56:0;;-1:-1:-1;;;;;;16552:6:0;;;;16602;;;16534:15;;16552:6;;16653:25;;:40;;;;;;;;;;;;;;16552:6;16653:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16653:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16653:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16653:40:0;16723;;;-1:-1:-1;;;16723:40:0;;16757:4;16723:40;;;;;;16653;;-1:-1:-1;16704:16:0;;-1:-1:-1;;;;;16723:25:0;;;;;:40;;;;;16653;;16723;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16723:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16723:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16723:40:0;16812:4;16774:17;16794:24;;;:9;16723:40;16794:24;;;;;16723:40;;-1:-1:-1;16844:30:0;16853:9;16864;16844:8;:30::i;:::-;16885:20;16908:11;16831:43;;-1:-1:-1;16908:11:0;17018:23;:9;17032:8;17018:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;17151:12:0;17125:23;:9;17139:8;17125:23;:13;:23;:::i;:::-;:38;;;;;;17115:48;;17254:1;17244:7;:11;:26;;;;;17269:1;17259:7;:11;17244:26;17222:114;;;;-1:-1:-1;;;17222:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17347:31;17361:4;17368:9;17347:5;:31::i;:::-;17389:35;17403:7;17412:2;17416:7;17389:13;:35::i;:::-;17435;17449:7;17458:2;17462:7;17435:13;:35::i;:::-;17492:40;;;-1:-1:-1;;;17492:40:0;;17526:4;17492:40;;;;;;-1:-1:-1;;;;;17492:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17492:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17492:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17492:40:0;17554;;;-1:-1:-1;;;17554:40:0;;17588:4;17554:40;;;;;;17492;;-1:-1:-1;;;;;;17554:25:0;;;;;:40;;;;;17492;;17554;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17554:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17554:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17554:40:0;;-1:-1:-1;17607:49:0;17615:8;17554:40;17635:9;17646;17607:7;:49::i;:::-;17671:5;17667:50;;;17708:8;;17686:31;;-1:-1:-1;;;;;17694:8:0;;;;-1:-1:-1;;;17708:8:0;;;17686:31;:21;:31;:::i;:::-;17678:5;:39;17667:50;17773:38;;;;;;;;;;;;;;-1:-1:-1;;;;;17773:38:0;;;17778:10;;17773:38;;;;;;;;;;;11167:1;;;;;;;;;11190;11179:8;:12;;;;16326:1493;;;:::o;6317:39::-;;;;;;;;;;;;;;-1:-1:-1;;;6317:39:0;;;;:::o;8655:142::-;8718:4;8735:32;8745:10;8757:2;8761:5;8735:9;:32::i;10316:49::-;10360:5;10316:49;:::o;20349:434::-;11100:8;;11112:1;11100:13;11092:41;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;;;;11155:1;11144:8;:12;20418:6;;20468;;20612:8;;20567:40;;;-1:-1:-1;;;20567:40:0;;20601:4;20567:40;;;;;;-1:-1:-1;;;;;20418:6:0;;;;20468;;;;20500:132;;20418:6;;20550:2;;20567:54;;-1:-1:-1;;;;;20612:8:0;;20418:6;;20567:25;;:40;;;;;;;;;;;;;;;20418:6;20567:40;;;5:2:-1;;;;30:1;27;20:12;5:2;20567:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20567:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20567:40:0;;:54;:44;:54;:::i;:::-;20500:13;:132::i;:::-;20755:8;;20710:40;;;-1:-1:-1;;;20710:40:0;;20744:4;20710:40;;;;;;20643:132;;20671:7;;20693:2;;20710:54;;-1:-1:-1;;;20755:8:0;;-1:-1:-1;;;;;20755:8:0;;-1:-1:-1;;;;;20710:25:0;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;20643:132:0;-1:-1:-1;;11190:1:0;11179:8;:12;-1:-1:-1;20349:434:0:o;10478:22::-;;;-1:-1:-1;;;;;10478:22:0;;:::o;10535:21::-;;;-1:-1:-1;;;;;10535:21:0;;:::o;9186:996::-;9408:15;9396:8;:27;;9388:56;;;;;-1:-1:-1;;;9388:56:0;;;;;;;;;;;;-1:-1:-1;;;9388:56:0;;;;;;;;;;;;;;;9560:16;;-1:-1:-1;;;;;9804:13:0;;;9455:14;9804:13;;;:6;:13;;;;;;;;:15;;;;;;;;;9627:250;;6756:66;9627:250;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9627:250:0;;;;;9595:301;;;;;;-1:-1:-1;;;9496:415:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9496:415:0;;;;;;9472:450;;;;;;;;;9960:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9455:14;;9804:15;9960:26;;;;;-1:-1:-1;;9960:26:0;;;;;;;;;;9804:15;9960:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;9960:26:0;;-1:-1:-1;;9960:26:0;;;-1:-1:-1;;;;;;;10019:30:0;;;;;;:59;;;10073:5;-1:-1:-1;;;;;10053:25:0;:16;-1:-1:-1;;;;;10053:25:0;;10019:59;9997:135;;;;;-1:-1:-1;;;9997:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10143:31;10152:5;10159:7;10168:5;10143:8;:31::i;:::-;9186:996;;;;;;;;;:::o;6489:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;20832:221::-;11100:8;;11112:1;11100:13;11092:41;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;-1:-1:-1;;;11092:41:0;;;;;;;;;;;;;;;11155:1;11144:8;:12;20902:6;;20895:39;;;-1:-1:-1;;;20895:39:0;;20928:4;20895:39;;;;;;20873:172;;-1:-1:-1;;;;;20902:6:0;;20895:24;;:39;;;;;;;;;;;;;;20902:6;20895:39;;;5:2:-1;;;;30:1;27;20:12;5:2;20895:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20895:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20895:39:0;20956:6;;20949:39;;;-1:-1:-1;;;20949:39:0;;20982:4;20949:39;;;;;;-1:-1:-1;;;;;20956:6:0;;;;20949:24;;:39;;;;;20895;;20949;;;;;;;;20956:6;20949:39;;;5:2:-1;;;;30:1;27;20:12;5:2;20949:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20949:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20949:39:0;21003:8;;-1:-1:-1;;;;;21003:8:0;;;;-1:-1:-1;;;21026:8:0;;;20873:7;:172::i;:::-;11190:1;11179:8;:12;20832:221::o;11528:383::-;10433:34;;;;;;;;;;;;;;;;;11707:43;;-1:-1:-1;;;;;11707:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11707:43:0;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;11682:79:0;;;;11647:12;;11661:17;;11682:10;;;11707:43;11682:79;;;25:18:-1;11682:79:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;11682:79:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;11646:115:0;;;;11794:7;:57;;;;-1:-1:-1;11806:11:0;;:16;;:44;;;11837:4;11826:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11826:24:0;11806:44;11772:131;;;;;-1:-1:-1;;;11772:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11528:383;;;;;:::o;21483:151::-;21541:9;21571:6;;;:30;;-1:-1:-1;;21586:5:0;;;21600:1;21595;21586:5;21595:1;21581:15;;;;;:20;21571:30;21563:63;;;;;-1:-1:-1;;;21563:63:0;;;;;;;;;;;;-1:-1:-1;;;21563:63:0;;;;;;;;;;;;;;21337:138;21430:5;;;21425:16;;;;21417:50;;;;;-1:-1:-1;;;21417:50:0;;;;;;;;;;;;-1:-1:-1;;;21417:50:0;;;;;;;;;;;;;;12805:1018;-1:-1:-1;;;;;12980:23:0;;;;;:50;;-1:-1:-1;;;;;;13007:23:0;;;12980:50;12958:117;;;;;-1:-1:-1;;;12958:117:0;;;;;;;;;;;;-1:-1:-1;;;12958:117:0;;;;;;;;;;;;;;;13190:18;;13117:23;:15;:23;;;-1:-1:-1;;;13190:18:0;;;;13173:35;;;13246:15;;;;;;:33;;-1:-1:-1;;;;;;13265:14:0;;;;13246:33;:51;;;;-1:-1:-1;;;;;;13283:14:0;;;;13246:51;13242:410;;;13489:11;13416:84;;13424:44;13458:9;13424:27;13441:9;13424:16;:27::i;:::-;-1:-1:-1;;;;;13424:33:0;;:44;:33;:44;:::i;:::-;13375:20;:125;;-1:-1:-1;;;;;13416:53:0;;;;:84;;;;13375:125;;;13556:84;;;13564:44;13598:9;13564:27;13581:9;13564:16;:27::i;:44::-;13515:20;:125;;-1:-1:-1;;;;;13556:53:0;;;;:84;;;;13515:125;;;13242:410;13662:8;:28;;-1:-1:-1;;13662:28:0;-1:-1:-1;;;;;13662:28:0;;;;;;;-1:-1:-1;;;;13701:28:0;-1:-1:-1;;;13701:28:0;;;;;;;;;-1:-1:-1;;;;;13740:35:0;-1:-1:-1;;;13740:35:0;;;;;;;;;13791:24;;;13796:8;;;13791:24;;13806:8;;;;;;;13791:24;;;;;;;;;;;;;;;;;12805:1018;;;;;;:::o;8018:206::-;-1:-1:-1;;;;;8136:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;8185:31;;;;;;;;;;;;;;;;;8018:206;;;:::o;8232:257::-;-1:-1:-1;;;;;8363:15:0;;;;;;:9;:15;;;;;;:26;;8383:5;8363:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;8345:15:0;;;;;;;:9;:15;;;;;;:44;;;;8416:13;;;;;;;:24;;8434:5;8416:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;8400:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;8456:25;;;;;;;8400:13;;8456:25;;;;;;;;;;;;;8232:257;;;:::o;13913:879::-;14004:10;14032:13;14064:7;;;;;;;;;-1:-1:-1;;;;;14064:7:0;-1:-1:-1;;;;;14048:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14048:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14048:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14048:32:0;14146:5;;-1:-1:-1;;;;;14099:19:0;;;;;;-1:-1:-1;14048:32:0;;-1:-1:-1;14146:5:0;14177:608;;14207:11;;14203:512;;14239:13;14255:44;14265:33;-1:-1:-1;;;;;14265:18:0;;;;:33;;;:22;:33;:::i;14255:44::-;14239:60;;14318:17;14338;14348:6;14338:9;:17::i;:::-;14318:37;;14386:9;14378:5;:17;14374:326;;;14420:17;14440:37;14456:20;:5;14466:9;14456:20;:9;:20;:::i;:::-;14440:11;;;:37;:15;:37;:::i;:::-;14420:57;-1:-1:-1;14500:19:0;14522:27;14539:9;14522:12;:5;14532:1;14522:12;:9;:12;:::i;:::-;:16;:27;:16;:27;:::i;:::-;14500:49;;14572:17;14604:11;14592:9;:23;;;;;;;-1:-1:-1;14642:13:0;;14638:42;;14657:23;14663:5;14670:9;14657:5;:23::i;:::-;14374:326;;;;14203:512;;;14177:608;;;14736:11;;14732:53;;14772:1;14764:5;:9;14732:53;13913:879;;;;;;:::o;21939:312::-;21987:9;22017:1;22013;:5;22009:235;;;-1:-1:-1;22039:1:0;22075;22071;22067:5;;:9;22091:92;22102:1;22098;:5;22091:92;;;22128:1;22124:5;;22166:1;22161;22157;22153;:5;;;;;;:9;22152:15;;;;;;22148:19;;22091:92;;;22009:235;;;;22204:6;;22200:44;;-1:-1:-1;22231:1:0;22200:44;21939:312;;;:::o;7586:204::-;7662:11;;:22;;7678:5;7662:22;:15;:22;:::i;:::-;7648:11;:36;;;-1:-1:-1;;;;;7711:13:0;;;;:9;:13;;;;;;:24;;7729:5;7711:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;7695:13:0;;;;;;:9;:13;;;;;;;;:40;;;;7751:31;;;;;;;7695:13;;;;7751:31;;;;;;;;;;7586:204;;:::o;21716:105::-;21774:9;21804:1;21800;:5;:13;;21812:1;21800:13;;;21808:1;21800:13;21796:17;21716:105;-1:-1:-1;;;21716:105:0:o;7798:212::-;-1:-1:-1;;;;;7880:15:0;;;;;;:9;:15;;;;;;:26;;7900:5;7880:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;7862:15:0;;;;;;:9;:15;;;;;:44;;;;7931:11;:22;;7947:5;7931:22;:15;:22;:::i;:::-;7917:11;:36;;;7969:33;;;;;;;;-1:-1:-1;;;;;7969:33:0;;;;;;;;;;;;;7798:212;;:::o;22524:120::-;-1:-1:-1;;;;;22600:10:0;-1:-1:-1;;;22600:17:0;;22524:120::o;22715:108::-;22775:9;-1:-1:-1;;;;;22805:10:0;;-1:-1:-1;;;;;22801:14:0;;22805:10;22801:14;;;;;;22715:108;-1:-1:-1;;;22715:108:0:o;21192:137::-;21285:5;;;21280:16;;;;21272:49;;;;;-1:-1:-1;;;21272:49:0;;;;;;;;;;;;-1:-1:-1;;;21272:49:0;;;;;;;;;;;;;","linkReferences":{},"immutableReferences":{}}}}}}},"signatures":{"function":[{"signature":"allowance(address,address)","signatureHash4":"0xdd62ed3e","signatureHash32":"0xdd62ed3e90e97b3d417db9c0c7522647811bafca5afc6694f143588d255fdfb4"},{"signature":"approve(address,uint256)","signatureHash4":"0x095ea7b3","signatureHash32":"0x095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba"},{"signature":"balanceOf(address)","signatureHash4":"0x70a08231","signatureHash32":"0x70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be"},{"signature":"burn(address)","signatureHash4":"0x89afcb44","signatureHash32":"0x89afcb44fd79f61b5bbd470c26d7036838c13afd3c4b3014433636cfd3b48a0c"},{"signature":"decimals()","signatureHash4":"0x313ce567","signatureHash32":"0x313ce567add4d438edf58b94ff345d7d38c45b17dfc0f947988d7819dca364f9"},{"signature":"DOMAIN_SEPARATOR()","signatureHash4":"0x3644e515","signatureHash32":"0x3644e5157256d68e3eeedd2ead302507a9c4ffaff665547d2c3623a1e9e7edf4"},{"signature":"factory()","signatureHash4":"0xc45a0155","signatureHash32":"0xc45a01550ceb4bc5c6b2e6f722b5033a03078f9bd6673457375ba94c26ac1cf0"},{"signature":"getReserves()","signatureHash4":"0x0902f1ac","signatureHash32":"0x0902f1ac5dbaeedd3217f11b3cbaf929216c9c5abc2d69da89d54964bead575d"},{"signature":"initialize(address,address)","signatureHash4":"0x485cc955","signatureHash32":"0x485cc955cd05f29985ce37d87ac35dcf2fdbc60b9106f66a532e31a2f1d5743b"},{"signature":"kLast()","signatureHash4":"0x7464fc3d","signatureHash32":"0x7464fc3daadc6b7cb5f80b82dc6e5d222f9994992754c249d00aab889384344f"},{"signature":"MINIMUM_LIQUIDITY()","signatureHash4":"0xba9a7a56","signatureHash32":"0xba9a7a561dbc9f0af7f927ac33b75b4ff60fbdde7538f216ec900bc0a005b1d6"},{"signature":"mint(address)","signatureHash4":"0x6a627842","signatureHash32":"0x6a627842f752de95745ef8f3ca67858982b5f585d752f8163e5855050041cb3c"},{"signature":"name()","signatureHash4":"0x06fdde03","signatureHash32":"0x06fdde0383f15d582d1a74511486c9ddf862a882fb7904b3d9fe9b8b8e58a796"},{"signature":"nonces(address)","signatureHash4":"0x7ecebe00","signatureHash32":"0x7ecebe00bc8d5df94a191da8e29b79e67a22b668e14b756a81ef2f5fa215cb0c"},{"signature":"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)","signatureHash4":"0xd505accf","signatureHash32":"0xd505accfee7b46ac3ce97322c21f328b64073d188137e16f7ef87f8de076b51c"},{"signature":"PERMIT_TYPEHASH()","signatureHash4":"0x30adf81f","signatureHash32":"0x30adf81f3a0c46a6cebb721528589a7ad2600589f62ced3bd69c263c166c29a2"},{"signature":"price0CumulativeLast()","signatureHash4":"0x5909c0d5","signatureHash32":"0x5909c0d5868c889e391177acc0e30d79c2a2f0c003c81fd7fc82a420546c52da"},{"signature":"price1CumulativeLast()","signatureHash4":"0x5a3d5493","signatureHash32":"0x5a3d54930afb776105ef150005edc3c260a03f6719b5a0170db9ac2397200f87"},{"signature":"skim(address)","signatureHash4":"0xbc25cf77","signatureHash32":"0xbc25cf77f209a4796fa892acd45be15fa2a2d91b60348de52e18e4098606ba6d"},{"signature":"swap(uint256,uint256,address,bytes)","signatureHash4":"0x022c0d9f","signatureHash32":"0x022c0d9f14a579d1d17baf9fddaebffc4a661f18e5dbcdf9b78b0e655ef26681"},{"signature":"symbol()","signatureHash4":"0x95d89b41","signatureHash32":"0x95d89b41e2f5f391a79ec54e9d87c79d6e777c63e32c28da95b4e9e4a79250ec"},{"signature":"sync()","signatureHash4":"0xfff6cae9","signatureHash32":"0xfff6cae917b7a8768ced5ece158885f4009776adc00606f01315420108ff9e10"},{"signature":"token0()","signatureHash4":"0x0dfe1681","signatureHash32":"0x0dfe16819b2523f68151ea44c4f107305bfeb85c4b18e7e63ac6f999d8cf9a0e"},{"signature":"token1()","signatureHash4":"0xd21220a7","signatureHash32":"0xd21220a7b5fcd6706feb17ecf897df81a823584a161e849e09b1ff66574ed2cb"},{"signature":"totalSupply()","signatureHash4":"0x18160ddd","signatureHash32":"0x18160ddd7f15c72528c2f94fd8dfe3c8d5aa26e2c50c7d81f4bc7bee8d4b7932"},{"signature":"transfer(address,uint256)","signatureHash4":"0xa9059cbb","signatureHash32":"0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b"},{"signature":"transferFrom(address,address,uint256)","signatureHash4":"0x23b872dd","signatureHash32":"0x23b872dd7302113369cda2901243429419bec145408fa8b352b3dd92b66c680b"}],"event":[{"signature":"Approval(address,address,uint256)","signatureHash4":"0x8c5be1e5","signatureHash32":"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925"},{"signature":"Burn(address,uint256,uint256,address)","signatureHash4":"0xdccd412f","signatureHash32":"0xdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496"},{"signature":"Mint(address,uint256,uint256)","signatureHash4":"0x4c209b5f","signatureHash32":"0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f"},{"signature":"Swap(address,uint256,uint256,uint256,uint256,address)","signatureHash4":"0xd78ad95f","signatureHash32":"0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822"},{"signature":"Sync(uint112,uint112)","signatureHash4":"0x1c411e9a","signatureHash32":"0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1"},{"signature":"Transfer(address,address,uint256)","signatureHash4":"0xddf252ad","signatureHash32":"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"}],"error":[]},"proxyResolution":{"isProxy":false,"proxyType":null,"implementations":[]},"match":"match","chainId":"56","address":"0xb4Ec801aED8C92F2E69589518AAa127afb37d8C9"}