0x60a0806040527371296ebc93bb8645fc0826eaed445e55b0813b41608052611ebe908161004f8239608051818181610464015281816111e10152818161136d01528181611b100152611c1b0152f3fe608060405236156100175734610019576100176103e6565b005b600080fd5b1561002557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152fd5b60031b906107f860f883169216820361009857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff60149116029060ff821691820361009857565b9060ff8091169116029060ff821691820361009857565b9061ffff8092166101000391821161009857565b608a019081608a1161009857565b60a801908160a81161009857565b9190820180921161009857565b67ffffffffffffffff811161014457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6020810190811067ffffffffffffffff82111761014457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761014457604052565b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000903581811693926014811061020557505050565b60140360031b82901b16169150565b1561021b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642073656e6465720000000000000000000000000000000000006044820152fd5b359060208110610287575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b9081600003918083057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff149015171561009857565b9190820391821161009857565b8181029291811591840414171561009857565b60005b83811061031c5750506000910152565b818101518382015260200161030c565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361036881518092818752878088019101610309565b0116010190565b60ff60019116019060ff821161009857565b92919267ffffffffffffffff821161014457604051916103c960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461018f565b829481845281830111610019578281602093846000960137010152565b6000366004116109f8578035817fffffffff0000000000000000000000000000000000000000000000000000000082167f10d1e85c0000000000000000000000000000000000000000000000000000000081036115265750505060243681116115225773ffffffffffffffffffffffffffffffffffffffff610490817f00000000000000000000000000000000000000000000000000000000000000001660103560601c1461001e565b3660a410156114f65760a4358060f81c90604080600784169316149160a594368610156114cb57853560f81c946104ee600761ffff6104d960ff6104d38b610083565b166100f3565b16956104e489610115565b5060fb1c16611d6c565b3660a7101561149f5761050088610115565b94601481029080820460141490151715611473576105286105218288610123565b9187610123565b6014810180821161144757808311610a0e573610610fbb5790601481610550930301906101d0565b60601c9073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2918080841161143e575b506040519260208401917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16835260601b16603484015260288352606083019583871067ffffffffffffffff88111761141157508594939261066a610697937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0936106a39960405283519020608084019687917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605594927fff00000000000000000000000000000000000000000000000000000000000000855260601b166001840152601583015260358201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8081018652018461018f565b33925190201614610214565b6001850180861161124d57368110156113e45735916002860191828711610f6b57368310156110e1576106e99060ff6106e26007863560f81c166100c7565b1690610123565b9461070260ff6106fb8660fc1c6100c7565b1687610123565b9561071f60ff61071884600f8960f81c166100dc565b1688610123565b93368510156113b757600185018511610ac4576001850196610b22575036861015610af55760018601808711610ac457361115610af55761077260ff61076b6007893560fb1c166100c7565b1682610123565b61079660ff61078f61078a60078b3560fb1c1661036f565b6100c7565b1683610123565b808211610af157368111610af157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff926107d29203906101d0565b9560fc1c0160ff8111610ac45760ff166007873560fb1c1614600014610a5e575061082a30965b60ff6106e26007893560f81c169461082561081f84610818848a6100dc565b1686610123565b9661036f565b6100dc565b808211610a1257368111610a12579080610845920390610279565b901c903560f81c6001843560fb1c6007161b90811660ff16148015610a43576401000276a4935b60038101808211610a1657368111610a125760409788519189830183811067ffffffffffffffff821117610144578a526003835260209384840192600382853760006023860152818111610a0e57368211610a0e57948b99989796946109c494610927948f9861095a956108e861091592369080840390610381565b927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd369236030190610381565b918d5196879451809287870190610309565b830161093b82518093878085019101610309565b0161094e82518093868085019101610309565b0103808452018261018f565b8751988997889687957f128acb0800000000000000000000000000000000000000000000000000000000875273ffffffffffffffffffffffffffffffffffffffff80941660048801526024870152604486015216606484015260a0608484015260a483019061032c565b039260601c5af18015610a02576109da57505050565b813d83116109fb575b6109ed818361018f565b810103126109f85750565b80fd5b503d6109e3565b505051903d90823e3d90fd5b8c80fd5b8880fd5b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b73fffd8963efd1fc6a506488495d951d5263988d259361086c565b610a7660ff61076b61078a60078a3560fb1c1661036f565b9060026007883560fb1c16019060ff82116100985760ff6106e2610a99936100c7565b808211610ac057368111610ac0578161082a92610ab79203906101d0565b60601c966107f9565b8980fd5b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8a80fd5b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b9897969450946040808a3560f81c161460001461127a575060038601861161124d5760ff811695610b568760038301610123565b806003830111610a1257368111610a12579060037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd82610b999403019101610279565b821c95610ba98160018601610123565b806001860111610a1257368111610a1257610bee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86610bfa93030160018701610279565b841c9160018601610123565b9673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23b15610a12576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815281600482015289816024818373c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1801561124257908a9161122e575b5080838015611224575b8280929181924190f1156111a6579088916080808c3560f81c16146111b5575b5050505b60148501808611610f6b5736106111b157610cb960ff821685610123565b808511610fac57368111610fac5784610cd3910385610279565b821c604051907fa9059cbb000000000000000000000000000000000000000000000000000000008252863560601c600483015260248201526020816044818b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af19081156111a657889161116c575b501561110e57865b6007893560fb1c1660ff821610610d5b57505050505050505050565b368710156110e1578635967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a1657600101968060fb1c60148260fb1c02046014148160fb1c151715610a1657610dbb60148260fb1c0288610123565b60018260fb1c0190818360fb1c116110b457816014810204601414821517156110b457610deb601483028a610123565b808211610fbb57368111610fbb57610e0b82610e169360149303906101d0565b60601c920289610123565b60028360fb1c01808460fb1c116110875780601481020460141481151715611087576014610e4591028a610123565b808211610fbb57368111610fbb579080610e609203906101d0565b60601c60078360f81c16610e80610e7a60ff8816836102f6565b8a610123565b906001810180911161105a57610e7a610e9d9160ff8916906102f6565b808211610a0e57368111610a0e5781600192610eba920390610279565b871c9360fb1c1b60ff81893560f81c161614600014610fbf5760405192610ee084610173565b8b8452823b15610fbb5791610f4193918c8094604051968795869485937f022c0d9f0000000000000000000000000000000000000000000000000000000085528560048601526024850152604484015260806064840152608483019061032c565b03925af18015610fb057908991610f98575b50505b60ff80821614610f6b5760ff16600101610d3f565b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b610fa190610130565b610fac578738610f53565b8780fd5b6040513d8b823e3d90fd5b8b80fd5b60405192610fcc84610173565b8b8452823b15610fbb579161102d93918c8094604051968795869485937f022c0d9f0000000000000000000000000000000000000000000000000000000085526004850152846024850152604484015260806064840152608483019061032c565b03925af18015610fb057908991611046575b5050610f56565b61104f90610130565b610fac57873861103f565b60248d7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60248c7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f7472616e7366657220746f20666972737420746172676574206661696c6564006044820152fd5b90506020813d821161119e575b816111866020938361018f565b81010312610fac57518015158103610fac5738610d37565b3d9150611179565b6040513d8a823e3d90fd5b8680fd5b826111c2819382936102e9565b81811561121b575b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690f11561121057863880610c97565b6040513d88823e3d90fd5b506108fc6111ca565b6108fc9150610c77565b61123790610130565b610a12578838610c6d565b6040513d8c823e3d90fd5b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b956080808a3560f81c1614611290575b50610c9b565b6003810190818111610a16576112a960ff841683610123565b808311610ac057368111610ac0576112e692917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd91030190610279565b821c73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2803b15610a12578880916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528760048401525af18015610fb0579089916113a3575b508080809381811561139a575b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690f115611210573861128a565b506108fc611356565b6113ac90610130565b610fac578738611349565b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b7f4e487b710000000000000000000000000000000000000000000000000000000060005260416004526000fd5b92905038610573565b868d7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b848b7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b838a7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b867f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b50907f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b5080fd5b7ffa461e33000000000000000000000000000000000000000000000000000000008103611a62575050503660851015611a35576085353660861015611a0857608635908160fb1c908060f81c602091828083161492608795368710156110e157863560f81c9560ff61ffff61159e826104d38b610083565b16956115a989610107565b9536608910156119db57906115c460038d9360fb1c16611ccb565b906115d160078216611dfa565b929096600760893560f81c1696878114600014611987575060079073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2955b5060f81c168681036118fc575073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2965b60409762ffffff8951938b85019773ffffffffffffffffffffffffffffffffffffffff93848092168a52168b86015216606084015260608352608083019183831067ffffffffffffffff841117610144576106977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80611742956117158d9a998b9a888c528351902060a084019687917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605594927fff00000000000000000000000000000000000000000000000000000000000000855260601b166001840152601583015260358201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6081018652018461018f565b1614611752575b505050506106a3565b36602411610ac05760043536604411610af1578a8112156118ea57611776906102b4565b905b36608810156118bd5761178a89610107565b9283608a11610fbb57368411610fbb57608a3593867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff76820110611886575b50906117da816107186117e9946100c7565b906106e260883560fc1c6100c7565b6117f38982610123565b808211610fbb57368111610fbb578161181a9392611812920390610279565b871c906102e9565b90851c10611829578080611749565b6064925051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601460248201527f696e73756666696369656e7420726576656e75650000000000000000000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908703608a0160031b1b909316926117da6117c8565b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b506118f66024356102b4565b90611778565b61191e866119176119118d836106e2876100c7565b936100c7565b168b610123565b601481018082116119585780831161195357361061194f5790601481611946930301906101d0565b60601c96611627565b8f80fd5b508f80fd5b505060248f7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b9091929394506119a2866119176119118d836106e2876100c7565b601481018082116119585780831161195357361061194f57918f959493928260146007946119d2930301906101d0565b60601c95611603565b60248c7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526032600452fd5b7f3ccfd60b0000000000000000000000000000000000000000000000000000000003611bf95750506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290602081602481855afa908115611bee578391611bbd575b5080611b4f575b50508080808047818115611b46575b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690f115611b3a5750565b604051903d90823e3d90fd5b506108fc611af9565b813b15611bb95782916024839260405194859384927f2e1a7d4d00000000000000000000000000000000000000000000000000000000845260048401525af18015611bae57611b9f575b80611aea565b611ba890610130565b38611b99565b6040513d84823e3d90fd5b8280fd5b90506020813d8211611be6575b81611bd76020938361018f565b81010312611bb9575138611ae3565b3d9150611bca565b6040513d85823e3d90fd5b36159182611cc557611c4273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016331461001e565b8392611c985760f81c9061ffff611c5d60ff6104d385610083565b168260030180600311156106a3576024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b50505050565b60ff166004811015611d0d5780611ce357506101f490565b60018103611cf25750610bb890565b60028103611d01575061271090565b600303611d0d57606490565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c69642066656520696e6465780000000000000000000000000000006044820152606490fd5b6000916000918015611dbd57600114611d8157565b73c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac92507fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c63039150565b50735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f92507f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f9150565b6000916000918015611e4b57600114611e0f57565b73baceb8ec6b9355dfc0269c18bac9d6e2bdc29c4f92507fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b549150565b50731f98431c8ad98523631ae4a59f267346ea31f98492507fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54915056fea2646970667358221220191ecd19bcf454eb714d2f82348030aafb7b69643f29b2d16a55d0fe41635a6d64736f6c63430008130033