diff --git a/local-chains/v31.0/gateway-state.tar.gz b/local-chains/v31.0/gateway-state.tar.gz new file mode 100644 index 000000000..8e4ba1974 Binary files /dev/null and b/local-chains/v31.0/gateway-state.tar.gz differ diff --git a/local-chains/v31.0/gateway/config.yaml b/local-chains/v31.0/gateway/config.yaml new file mode 100644 index 000000000..4f77bf260 --- /dev/null +++ b/local-chains/v31.0/gateway/config.yaml @@ -0,0 +1,16 @@ +genesis: + bridgehub_address: '0x4555e7147f652fd5d8ecae6abd825b9ec5107e0a' + bytecode_supplier_address: '0xadfa35e51bc33233268e39ca495432cf0c7ecb52' + genesis_input_path: ./local-chains/v31.0/genesis.json + chain_id: 506 +l1_sender: + operator_commit_sk: '0x3ba203f4d1aa1f52b6fc890083b9ca42005fa10d52c45ab43049cb0c7a1137fd' + operator_prove_sk: '0x3b238563d120e58ad6747d5d573d19abe80ac5aa22414ec737463f61187443d8' + operator_execute_sk: '0x796621a4396f414d665ab3e20ad7f3402b43d0648f23c543398cef923a2933e4' +rpc: + address: 0.0.0.0:3052 +external_price_api_client: + source: Forced + forced_prices: + '0x0000000000000000000000000000000000000001': 3000 + diff --git a/local-chains/v31.0/gateway/contracts.yaml b/local-chains/v31.0/gateway/contracts.yaml new file mode 120000 index 000000000..61f4f8e0c --- /dev/null +++ b/local-chains/v31.0/gateway/contracts.yaml @@ -0,0 +1 @@ +../multi_chain/contracts_506.yaml \ No newline at end of file diff --git a/local-chains/v31.0/gateway/genesis.json b/local-chains/v31.0/gateway/genesis.json new file mode 120000 index 000000000..66919985c --- /dev/null +++ b/local-chains/v31.0/gateway/genesis.json @@ -0,0 +1 @@ +../genesis.json \ No newline at end of file diff --git a/local-chains/v31.0/gateway/wallets.yaml b/local-chains/v31.0/gateway/wallets.yaml new file mode 120000 index 000000000..e95d30df5 --- /dev/null +++ b/local-chains/v31.0/gateway/wallets.yaml @@ -0,0 +1 @@ +../multi_chain/wallets_506.yaml \ No newline at end of file diff --git a/local-chains/v31.0/genesis.json b/local-chains/v31.0/genesis.json index 70c207492..ce73ca623 100644 --- a/local-chains/v31.0/genesis.json +++ b/local-chains/v31.0/genesis.json @@ -6,7 +6,7 @@ ], [ "0x0000000000000000000000000000000000010001", - "0x608060405234801561000f575f5ffd5b5060043610610029575f3560e01c806365ac45a01461002d575b5f5ffd5b61004061003b3660046124d7565b610042565b005b6040805188151581526020810188905273ffffffffffffffffffffffffffffffffffffffff87168183015290517fc255d48d07e5511fbb86e840a0004e72af77e3be005c297b2217321cc9805e759181900360600190a1855f036100d2576040517f7a47c9a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518681527f642980873fb446309b4f15d0a43f338e9effa44ac203ea8ff284b364c511b94f9060200160405180910390a1866101eb576040518681527f4234a87684f87d4aefb25710ec0b94e3779d421742c1e737fa73d341f17b4bd89060200160405180910390a161014a618000600b612578565b73ffffffffffffffffffffffffffffffffffffffff1663ef0e2ff4876040518263ffffffff1660e01b815260040161018491815260200190565b5f604051808303815f87803b15801561019b575f5ffd5b505af11580156101ad573d5f5f3e3d5ffd5b505050507f9204be6e1b5cb853e6b4be63b286e27c232e39e70c18466f24dbb36c490633ec866040516101e291815260200190565b60405180910390a15b6040517ff48df979e08eb4b5f624bb68b4ca4987166dd8bab3850165370421040f64e088905f90a1610289878686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8a0181900481028201810190925288815292508891508790819084018382808284375f92019190915250600192506102c5915050565b6040518681527fd01e21be66147e834d803d6e8b8656aabf0c7c4cb36947b8c3cac47be96afd849060200160405180910390a150505050505050565b60408051861515815282151560208201527fa9b2c4af1df94abd3015bfd645412f8d782c753dda81c8d6349fdaf4b926c3ef910160405180910390a15f83806020019051810190610316919061272b565b90505f8380602001905181019061032d91906129ef565b90505f8761033b575f61033e565b60015b9050610348610377565b610355818484878c61049a565b610362818484878c610aac565b61036d87848461139c565b5050505050505050565b3061038662010000600c612578565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f29190612b0f565b73ffffffffffffffffffffffffffffffffffffffff16146104985761041b62010000600c612578565b6040517f6095a30700000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9190911690636095a307906024015f604051808303815f87803b158015610481575f5ffd5b505af1158015610493573d5f5f3e3d5ffd5b505050505b565b6040517f6ed49c856b31a9310b068722d853574c0f8b5fa54be60bf0760fc2ef4153153a905f90a18080156104cc5750815b6104ef576104ef858561014001516201000060056104ea9190612578565b611730565b811561059257610503620100006005612578565b845160208601516040517f47b78c1d0000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff91909116906347b78c1d906044015f604051808303815f87803b158015610577575f5ffd5b505af1158015610589573d5f5f3e3d5ffd5b5050505061062b565b6105a0620100006005612578565b845160208601516040517fba5a8f000000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff919091169063ba5a8f00906044015f604051808303815f87803b158015610614575f5ffd5b505af1158015610626573d5f5f3e3d5ffd5b505050505b6040517f8f917b02013cc48a49fb2d462eab1fe928ac94a873e32488e19a72aa19fe14bd905f90a180801561065d5750815b61067a5761067a858560e001516201000060026104ea9190612578565b811561075f5783516040519081527f0ab3fed163812dd91308fe7c08654fe465e1bb623d4edc613b04f74f02a5cecb9060200160405180910390a16106c3620100006002612578565b845160a086015160c08701516040517fff418104000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff91821660248401526044830152919091169063ff418104906064015f604051808303815f87803b158015610744575f5ffd5b505af1158015610756573d5f5f3e3d5ffd5b505050506107f8565b61076d620100006002612578565b845160c08601516040517fba5a8f000000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff919091169063ba5a8f00906044015f604051808303815f87803b1580156107e1575f5ffd5b505af11580156107f3573d5f5f3e3d5ffd5b505050505b5f8261087d5761080c620100006003612578565b73ffffffffffffffffffffffffffffffffffffffff1663c438a9f26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610854573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108789190612b0f565b61087f565b5f5b6040519091507f66cafe1ba56fff897cde09ba23dc61dfb4506b0ca7b2176878c8f3833c6c6f05905f90a18180156108b45750825b6108d2576108d2868661010001516201000060036104ea9190612578565b82156109e5578451604080870151815192835260208301527f37d3d3430909c8516d9079ae81c44c3d581ca9c64bc869605862b45ad33c8025910160405180910390a1610923620100006003612578565b8551604080880151606089015160808901515160a08b015193517fcc06b5ca0000000000000000000000000000000000000000000000000000000081526004810195909552602485019290925273ffffffffffffffffffffffffffffffffffffffff90811660448501528581166064850152608484019190915290811660a4830152919091169063cc06b5ca9060c4015f604051808303815f87803b1580156109ca575f5ffd5b505af11580156109dc573d5f5f3e3d5ffd5b50505050610aa4565b6109f3620100006003612578565b8551604080880151606089015160808901515192517ff95f5c100000000000000000000000000000000000000000000000000000000081526004810194909452602484019190915273ffffffffffffffffffffffffffffffffffffffff908116604484015284811660648401526084830191909152919091169063f95f5c109060a4015f604051808303815f87803b158015610a8d575f5ffd5b505af1158015610a9f573d5f5f3e3d5ffd5b505050505b505050505050565b5f82610b3157610ac0620100006004612578565b73ffffffffffffffffffffffffffffffffffffffff166337d277d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2c9190612b0f565b610b33565b5f5b90505f83610bba57610b49620100006004612578565b73ffffffffffffffffffffffffffffffffffffffff16632149ed746040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb59190612b31565b610bbc565b5f5b6040519091507f2279abc0bad9e740d23d1d202b1ce182a6f4c75a99b666e5389045132336245e905f90a15f610c14838860a00151886040015189608001515f01518a606001515f01518b6060015160200151611870565b60405190915073ffffffffffffffffffffffffffffffffffffffff8216907fcbc6e12879d66272eab5298d63d544f5ed89696ab731bdb753657ee5c4c79360905f90a26040517ff2f9b371bebad6b8fd624e64200f8bb8e6e2d0f5c37519d77800e4b253e1badd905f90a1838015610c895750845b610ca757610ca7888861012001516201000060046104ea9190612578565b8415610e715786516040519081527f58a597758b538819761dc3a5c590c67513555cddadbb8f77c48559c1e6e58b729060200160405180910390a16102608701515f9073ffffffffffffffffffffffffffffffffffffffff16610dcc5784610d2357610d2389896101e0015162010000600b6104ea9190612578565b610d3162010000600b612578565b60a08901516040517f58dabd6200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116906358dabd62906024016020604051808303815f875af1158015610da1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc59190612b0f565b9050610dd4565b506102608701515b610de2620100006004612578565b73ffffffffffffffffffffffffffffffffffffffff1663cd0df286895f01518a60a001518b608001518b5f015186888e608001518f606001516040518963ffffffff1660e01b8152600401610e3e989796959493929190612bd8565b5f604051808303815f87803b158015610e55575f5ffd5b505af1158015610e67573d5f5f3e3d5ffd5b5050505050610f78565b5f610e80620100006003612578565b73ffffffffffffffffffffffffffffffffffffffff1663c438a9f26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eec9190612b0f565b9050610efc620100006004612578565b73ffffffffffffffffffffffffffffffffffffffff1663dfc3d230895f01518584868c608001518d606001516040518763ffffffff1660e01b8152600401610f4996959493929190612cae565b5f604051808303815f87803b158015610f60575f5ffd5b505af1158015610f72573d5f5f3e3d5ffd5b50505050505b6040517f6bb8ed2daea1acd4614be834c3189e774669fc43df54a27f2d6e2eff23d30e3d905f90a1838015610faa5750845b610fc857610fc88888610160015162010000600a6104ea9190612578565b84156110fc5786516040519081527faa08bd809ea091899962a8f1f381431d9de6ad1a31348a77d3fcac422e923c339060200160405180910390a161101162010000600a612578565b73ffffffffffffffffffffffffffffffffffffffff1663619a038c885f01518960a001516201000060026110459190612578565b611053620100006003612578565b611061620100006005612578565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b168152600481019590955273ffffffffffffffffffffffffffffffffffffffff938416602486015291831660448501528216606484015216608482015260a4015f604051808303815f87803b1580156110e1575f5ffd5b505af11580156110f3573d5f5f3e3d5ffd5b505050506111e5565b61110a62010000600a612578565b73ffffffffffffffffffffffffffffffffffffffff1663f1d9db33885f01516201000060026111399190612578565b611147620100006003612578565b611155620100006005612578565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b168152600481019490945273ffffffffffffffffffffffffffffffffffffffff928316602485015290821660448401521660648201526084015f604051808303815f87803b1580156111ce575f5ffd5b505af11580156111e0573d5f5f3e3d5ffd5b505050505b8380156111ef5750845b6112275761120d88886101c0015162010000600f6104ea9190612578565b6112278888610180015162010000600d6104ea9190612578565b84156112d85761123b62010000600d612578565b875160a08901516102808a01516040517f65143424000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff9182166024840152604483015291909116906365143424906064015f604051808303815f87803b1580156112bd575f5ffd5b505af11580156112cf573d5f5f3e3d5ffd5b50505050611374565b6112e662010000600d612578565b875160a08901516040517f3aef55ef000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff90811660248301529190911690633aef55ef906044015f604051808303815f87803b15801561135d575f5ffd5b505af115801561136f573d5f5f3e3d5ffd5b505050505b83801561137e5750845b61036d5761036d88886101a0015162010000600e6104ea9190612578565b6040517f704f08cc17579e7a79fe304fb350bfc995ff3a4a6f44eff9796bd68a97033958905f90a16113d2620100006002612578565b73ffffffffffffffffffffffffffffffffffffffff16635dd68acd6113fb620100006003612578565b8561140a620100006005612578565b61141862010000600a612578565b6102408801516040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff9586166004820152938516602485015291841660448401528316606483015291909116608482015260a4015f604051808303815f87803b1580156114a1575f5ffd5b505af11580156114b3573d5f5f3e3d5ffd5b5050505062010000600f6114c79190612578565b82516080830151516040517f1bafc42e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff9190911690631bafc42e906044015f604051808303815f87803b15801561153c575f5ffd5b505af115801561154e573d5f5f3e3d5ffd5b505050506201000060106115629190612578565b825160a08401516040517fa81a1197000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff9081166024830152919091169063a81a1197906044015f604051808303815f87803b1580156115d9575f5ffd5b505af11580156115eb573d5f5f3e3d5ffd5b505050506201000060046115ff9190612578565b73ffffffffffffffffffffffffffffffffffffffff16636e7f096e8260800151602001516040518263ffffffff1660e01b815260040161164191815260200190565b5f604051808303815f87803b158015611658575f5ffd5b505af115801561166a573d5f5f3e3d5ffd5b5050505062010000600e61167e9190612578565b82516040517ffdf736a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092169163fdf736a3916116d69160040190815260200190565b5f604051808303815f87803b1580156116ed575f5ffd5b505af11580156116ff573d5f5f3e3d5ffd5b50506040517fbe0ee1cd96fc00da7deaf9bd546736224fa6360ceb890f465085ed4763e484ae92505f9150a1505050565b8073ffffffffffffffffffffffffffffffffffffffff167f8d0f494ae330e899ced101b43d7b0149cf310295ad00dd7574a7e57097e7a70e846040516117769190612d76565b60405180910390a2600283600281111561179257611792612d49565b036117a6576117a18282611942565b61181d565b60018360028111156117ba576117ba612d49565b036117c9576117a18282611bab565b5f8360028111156117dc576117dc612d49565b036117eb576117a18282611f92565b6040517f1906f34600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f1ed299883184d41bc443fb35ddbede2c41750c6925fc325572ab58d4b4fb46e2846040516118639190612d76565b60405180910390a2505050565b5f73ffffffffffffffffffffffffffffffffffffffff871615611894575085611938565b5f836040516020016118a69190612dcc565b60405160208183030381529060405290505f836040516020016118c99190612dfd565b60405160208183030381529060405290505f6118e783838a8a612260565b90505f806118f9620100006007612578565b8b8460405161190790612461565b61191393929190612e2e565b8190604051809103905ff5905080158015611930573d5f5f3e3d5ffd5b509450505050505b9695505050505050565b606082511461197d576040517fc4dc267300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907fe5de1a8257fcd3ae0f0d35e77b6e40f73827df8f8c1fffca4475a47c66cb7e09905f90a25f5f5f6119c985612307565b6040805173ffffffffffffffffffffffffffffffffffffffff8916602482018190526044820186905263ffffffff949094166064820181905260848083018590528351808403909101815260a49092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff6eca0b0000000000000000000000000000000000000000000000000000000001790528351878152908101829052808401859052606081018290529251959850965091945085939192917f54081407efffc733191a7a058e7727f9f366a4d32e7b0996c7ddee4e2645f1ce916080908290030190a25f611ac46180006006612578565b73ffffffffffffffffffffffffffffffffffffffff1682604051611ae89190612e81565b5f604051808303815f865af19150503d805f8114611b21576040519150601f19603f3d011682016040523d82523d5f602084013e611b26565b606091505b5050905080611b61576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8816907f418317f13de341ecea4e9ea5438c4032d7952fdcd8feca0a36350f0373d8a934905f90a25050505050505050565b604082511015611be7576040517fc4dc267300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907fa5d955568eb44a5e03e0b3acf1ecf2fded74cb281bfc7b4986f1bb6ff9215933905f90a25f5f83806020019051810190611c3d9190612e8c565b915091505f8282604051602001611c55929190612ef1565b60405160208183030381529060405290508080519060200120858051906020012014611cad576040517fc4dc267300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611cb78461232b565b60405190915073ffffffffffffffffffffffffffffffffffffffff8216907f39095cab8e21b2bcd1ea261b709ad382b091a238378c0d4416bd7abe719ecb61905f90a28073ffffffffffffffffffffffffffffffffffffffff163b5f03611d2757611d22848261237c565b611d90565b803f5f611d3386612307565b92505050808214611d8d576040517f646ac57e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b50505b8473ffffffffffffffffffffffffffffffffffffffff163b5f03611e5c57611db8838661237c565b73ffffffffffffffffffffffffffffffffffffffff851663b5c2cb29611de262010000600c612578565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015f604051808303815f87803b158015611e45575f5ffd5b505af1158015611e57573d5f5f3e3d5ffd5b505050505b8073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fb45ba7c66bbc716346a4b8401f780f9f44179230c6305da484dcd7907213013460405160405180910390a3611ec462010000600c612578565b6040517f99a88ec400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152838116602483015291909116906399a88ec4906044015f604051808303815f87803b158015611f34575f5ffd5b505af1158015611f46573d5f5f3e3d5ffd5b505060405173ffffffffffffffffffffffffffffffffffffffff881692507ff91ab6c46d02f563819d97fe5b04e9e7b637f7387fc9f638fab70d5095b3a2e391505f90a2505050505050565b8073ffffffffffffffffffffffffffffffffffffffff167f2da74450c0b028d3ee98ad22861e8decc354307fbf7c38162d08f3c2c8a56eac83806020019051810190611fde9190612b31565b60405190815260200160405180910390a25f828060200190518101906120049190612b31565b6040805160018082528183019092529192505f9190816020015b6120646040518060a001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f8152602001606081525090565b81526020019060019003908161201e5790505090506040518060a001604052808381526020018473ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f815260200160405180602001604052805f815250815250815f815181106120d8576120d8612f15565b60200260200101819052505f816040516024016120f59190612f42565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe9f18c170000000000000000000000000000000000000000000000000000000017905290505f61217b6180006006612578565b73ffffffffffffffffffffffffffffffffffffffff168260405161219f9190612e81565b5f604051808303815f865af19150503d805f81146121d8576040519150601f19603f3d011682016040523d82523d5f602084013e6121dd565b606091505b5050905080612218576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8616907f845c2bf561a9c4806318da72b9bcf10088accc69cc39da77161bc1d8509a36ae905f90a2505050505050565b60608484612272620100006003612578565b8585604051602401612288959493929190613010565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa8c5f7ea0000000000000000000000000000000000000000000000000000000017905295945050505050565b5f5f5f8380602001905181019061231e9190613066565b9196909550909350915050565b6040515f9061234090829084906020016130a6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012092915050565b8073ffffffffffffffffffffffffffffffffffffffff81163b156123e5576040517f646ac57e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401611d84565b50808060ff73ffffffffffffffffffffffffffffffffffffffff821611612451576040517fb24b1ccb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401611d84565b5061245c8383611942565b505050565b61104b806130c083390190565b73ffffffffffffffffffffffffffffffffffffffff8116811461248f575f5ffd5b50565b5f5f83601f8401126124a2575f5ffd5b50813567ffffffffffffffff8111156124b9575f5ffd5b6020830191508360208285010111156124d0575f5ffd5b9250929050565b5f5f5f5f5f5f5f60a0888a0312156124ed575f5ffd5b873580151581146124fc575f5ffd5b96506020880135955060408801356125138161246e565b9450606088013567ffffffffffffffff81111561252e575f5ffd5b61253a8a828b01612492565b909550935050608088013567ffffffffffffffff811115612559575f5ffd5b6125658a828b01612492565b989b979a50959850939692959293505050565b73ffffffffffffffffffffffffffffffffffffffff81811683821601908111156125c9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516102a0810167ffffffffffffffff81118282101715612620576126206125cf565b60405290565b6040516060810167ffffffffffffffff81118282101715612620576126206125cf565b60405160a0810167ffffffffffffffff81118282101715612620576126206125cf565b80516126778161246e565b919050565b5f82601f83011261268b575f5ffd5b8151602083015f5f67ffffffffffffffff8411156126ab576126ab6125cf565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156126f8576126f86125cf565b60405283815290508082840187101561270f575f5ffd5b8383602083015e5f602085830101528094505050505092915050565b5f6020828403121561273b575f5ffd5b815167ffffffffffffffff811115612751575f5ffd5b82016102a08185031215612763575f5ffd5b61276b6125fc565b81518152602080830151908201526040808301519082015261278f6060830161266c565b6060820152608082810151908201526127aa60a0830161266c565b60a082015260c0828101519082015260e082015167ffffffffffffffff8111156127d2575f5ffd5b6127de8682850161267c565b60e08301525061010082015167ffffffffffffffff8111156127fe575f5ffd5b61280a8682850161267c565b6101008301525061012082015167ffffffffffffffff81111561282b575f5ffd5b6128378682850161267c565b6101208301525061014082015167ffffffffffffffff811115612858575f5ffd5b6128648682850161267c565b6101408301525061016082015167ffffffffffffffff811115612885575f5ffd5b6128918682850161267c565b6101608301525061018082015167ffffffffffffffff8111156128b2575f5ffd5b6128be8682850161267c565b610180830152506101a082015167ffffffffffffffff8111156128df575f5ffd5b6128eb8682850161267c565b6101a0830152506101c082015167ffffffffffffffff81111561290c575f5ffd5b6129188682850161267c565b6101c0830152506101e082015167ffffffffffffffff811115612939575f5ffd5b6129458682850161267c565b6101e083015250612959610200830161266c565b61020082015261296c610220830161266c565b61022082015261297f610240830161266c565b610240820152612992610260830161266c565b61026082015261028091820151918101919091529392505050565b5f606082840312156129bd575f5ffd5b6129c5612626565b825181526020808401519082015260408301519091506129e48161246e565b604082015292915050565b5f602082840312156129ff575f5ffd5b815167ffffffffffffffff811115612a15575f5ffd5b820160e08185031215612a26575f5ffd5b612a2e612649565b8151612a398161246e565b81526020820151612a498161246e565b60208201526040820151612a5c8161246e565b6040820152606082015167ffffffffffffffff811115612a7a575f5ffd5b820160608187031215612a8b575f5ffd5b612a93612626565b815167ffffffffffffffff811115612aa9575f5ffd5b612ab58882850161267c565b825250602082015167ffffffffffffffff811115612ad1575f5ffd5b612add8882850161267c565b602083015250604091820151918101919091526060820152612b0285608084016129ad565b6080820152949350505050565b5f60208284031215612b1f575f5ffd5b8151612b2a8161246e565b9392505050565b5f60208284031215612b41575f5ffd5b5051919050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f815160608452612ba86060850182612b48565b905060208301518482036020860152612bc18282612b48565b915050604083015160408501528091505092915050565b88815273ffffffffffffffffffffffffffffffffffffffff8816602082015286604082015273ffffffffffffffffffffffffffffffffffffffff8616606082015273ffffffffffffffffffffffffffffffffffffffff8516608082015273ffffffffffffffffffffffffffffffffffffffff841660a0820152612c8860c0820184805182526020808201519083015260409081015173ffffffffffffffffffffffffffffffffffffffff16910152565b6101406101208201525f612ca0610140830184612b94565b9a9950505050505050505050565b86815285602082015273ffffffffffffffffffffffffffffffffffffffff8516604082015273ffffffffffffffffffffffffffffffffffffffff84166060820152612d266080820184805182526020808201519083015260409081015173ffffffffffffffffffffffffffffffffffffffff16910152565b61010060e08201525f612d3d610100830184612b94565b98975050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020810160038310612daf577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f81518060208401855e5f93019283525090919050565b7f577261707065642000000000000000000000000000000000000000000000000081525f612b2a6008830184612db5565b7f570000000000000000000000000000000000000000000000000000000000000081525f612b2a6001830184612db5565b73ffffffffffffffffffffffffffffffffffffffff8416815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201525f612e786060830184612b48565b95945050505050565b5f612b2a8284612db5565b5f5f60408385031215612e9d575f5ffd5b825167ffffffffffffffff811115612eb3575f5ffd5b612ebf8582860161267c565b925050602083015167ffffffffffffffff811115612edb575f5ffd5b612ee78582860161267c565b9150509250929050565b604081525f612f036040830185612b48565b8281036020840152612e788185612b48565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613004577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051865273ffffffffffffffffffffffffffffffffffffffff6020820151166020870152604081015115156040870152606081015160608701526080810151905060a06080870152612fee60a0870182612b48565b9550506020938401939190910190600101612f68565b50929695505050505050565b60a081525f61302260a0830188612b48565b82810360208401526130348188612b48565b73ffffffffffffffffffffffffffffffffffffffff968716604085015294909516606083015250608001529392505050565b5f5f5f60608486031215613078575f5ffd5b8351602085015190935063ffffffff81168114613093575f5ffd5b6040949094015192959394509192915050565b8281525f6130b76020830184612db5565b94935050505056fe608060405260405161104b38038061104b833981016040819052610022916103c3565b828161002f82825f610043565b5061003b90508261006e565b5050506104df565b61004c836100db565b5f825111806100585750805b1561006957610067838361011a565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6100ad5f5160206110045f395f51905f52546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a16100d881610146565b50565b6100e4816101e1565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061013f838360405180606001604052806027815260200161102460279139610275565b9392505050565b6001600160a01b0381166101b05760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b805f5160206110045f395f51905f525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61024e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016101a7565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101c0565b60605f5f856001600160a01b0316856040516102919190610494565b5f60405180830381855af49150503d805f81146102c9576040519150601f19603f3d011682016040523d82523d5f602084013e6102ce565b606091505b5090925090506102e0868383876102ea565b9695505050505050565b606083156103585782515f03610351576001600160a01b0385163b6103515760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101a7565b5081610362565b610362838361036a565b949350505050565b81511561037a5781518083602001fd5b8060405162461bcd60e51b81526004016101a791906104aa565b80516001600160a01b03811681146103aa575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156103d5575f5ffd5b6103de84610394565b92506103ec60208501610394565b60408501519092506001600160401b03811115610407575f5ffd5b8401601f81018613610417575f5ffd5b80516001600160401b03811115610430576104306103af565b604051601f8201601f19908116603f011681016001600160401b038111828210171561045e5761045e6103af565b604052818152828201602001881015610475575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b610b18806104ec5f395ff3fe60806040523661001357610011610017565b005b6100115b61001f6102a0565b73ffffffffffffffffffffffffffffffffffffffff1633036102965760607fffffffff000000000000000000000000000000000000000000000000000000005f35167fc9a6301a000000000000000000000000000000000000000000000000000000008101610097576100906102df565b915061028e565b7fb0e10d7a000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016100e857610090610332565b7f70d7c690000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160161013957610090610376565b7f07ae5bc0000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160161018a576100906103a6565b7fa39f25e5000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016101db576100906103f2565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b815160208301f35b61029e610405565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b60606102e9610415565b5f6102f736600481846108bc565b810190610304919061090b565b905061031f8160405180602001604052805f8152505f61041f565b505060408051602081019091525f815290565b60605f8061034336600481846108bc565b8101906103509190610951565b915091506103608282600161041f565b60405180602001604052805f8152509250505090565b6060610380610415565b5f61038e36600481846108bc565b81019061039b919061090b565b905061031f8161044a565b60606103b0610415565b5f6103b96102a0565b6040805173ffffffffffffffffffffffffffffffffffffffff831660208201529192500160405160208183030381529060405291505090565b60606103fc610415565b5f6103b96104ae565b61029e6104106104ae565b6104bc565b341561029e575f5ffd5b610428836104da565b5f825111806104345750805b15610445576104438383610526565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104736102a0565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16104ab81610552565b50565b5f6104b761065e565b905090565b365f5f375f5f365f845af43d5f5f3e8080156104d6573d5ff35b3d5ffd5b6104e381610685565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061054b8383604051806060016040528060278152602001610abc60279139610750565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81166105f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610285565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102c3565b73ffffffffffffffffffffffffffffffffffffffff81163b610729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610285565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610618565b60605f5f8573ffffffffffffffffffffffffffffffffffffffff16856040516107799190610a52565b5f60405180830381855af49150503d805f81146107b1576040519150601f19603f3d011682016040523d82523d5f602084013e6107b6565b606091505b50915091506107c7868383876107d1565b9695505050505050565b606083156108665782515f0361085f5773ffffffffffffffffffffffffffffffffffffffff85163b61085f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610285565b5081610870565b6108708383610878565b949350505050565b8151156108885781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102859190610a68565b5f5f858511156108ca575f5ffd5b838611156108d6575f5ffd5b5050820193919092039150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610906575f5ffd5b919050565b5f6020828403121561091b575f5ffd5b61054b826108e3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f5f60408385031215610962575f5ffd5b61096b836108e3565b9150602083013567ffffffffffffffff811115610986575f5ffd5b8301601f81018513610996575f5ffd5b803567ffffffffffffffff8111156109b0576109b0610924565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715610a1c57610a1c610924565b604052818152828201602001871015610a33575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e0caaecc6def8aef0cc1807b5cde21cdd37c32cd9aace965af85dd9900dd8b9364736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201aa2e946a8f3243addfe9444a32765c42b44fe218f272903435edf99de8f795864736f6c634300081c0033" + "0x608060405234801561000f575f5ffd5b5060043610610029575f3560e01c806365ac45a01461002d575b5f5ffd5b61004061003b3660046124d7565b610042565b005b6040805188151581526020810188905273ffffffffffffffffffffffffffffffffffffffff87168183015290517fc255d48d07e5511fbb86e840a0004e72af77e3be005c297b2217321cc9805e759181900360600190a1855f036100d2576040517f7a47c9a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518681527f642980873fb446309b4f15d0a43f338e9effa44ac203ea8ff284b364c511b94f9060200160405180910390a1866101eb576040518681527f4234a87684f87d4aefb25710ec0b94e3779d421742c1e737fa73d341f17b4bd89060200160405180910390a161014a618000600b612578565b73ffffffffffffffffffffffffffffffffffffffff1663ef0e2ff4876040518263ffffffff1660e01b815260040161018491815260200190565b5f604051808303815f87803b15801561019b575f5ffd5b505af11580156101ad573d5f5f3e3d5ffd5b505050507f9204be6e1b5cb853e6b4be63b286e27c232e39e70c18466f24dbb36c490633ec866040516101e291815260200190565b60405180910390a15b6040517ff48df979e08eb4b5f624bb68b4ca4987166dd8bab3850165370421040f64e088905f90a1610289878686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8a0181900481028201810190925288815292508891508790819084018382808284375f92019190915250600192506102c5915050565b6040518681527fd01e21be66147e834d803d6e8b8656aabf0c7c4cb36947b8c3cac47be96afd849060200160405180910390a150505050505050565b60408051861515815282151560208201527fa9b2c4af1df94abd3015bfd645412f8d782c753dda81c8d6349fdaf4b926c3ef910160405180910390a15f83806020019051810190610316919061272b565b90505f8380602001905181019061032d91906129ef565b90505f8761033b575f61033e565b60015b9050610348610377565b610355818484878c61049a565b610362818484878c610aac565b61036d87848461139c565b5050505050505050565b3061038662010000600c612578565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f29190612b0f565b73ffffffffffffffffffffffffffffffffffffffff16146104985761041b62010000600c612578565b6040517f6095a30700000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9190911690636095a307906024015f604051808303815f87803b158015610481575f5ffd5b505af1158015610493573d5f5f3e3d5ffd5b505050505b565b6040517f6ed49c856b31a9310b068722d853574c0f8b5fa54be60bf0760fc2ef4153153a905f90a18080156104cc5750815b6104ef576104ef858561014001516201000060056104ea9190612578565b611730565b811561059257610503620100006005612578565b845160208601516040517f47b78c1d0000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff91909116906347b78c1d906044015f604051808303815f87803b158015610577575f5ffd5b505af1158015610589573d5f5f3e3d5ffd5b5050505061062b565b6105a0620100006005612578565b845160208601516040517fba5a8f000000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff919091169063ba5a8f00906044015f604051808303815f87803b158015610614575f5ffd5b505af1158015610626573d5f5f3e3d5ffd5b505050505b6040517f8f917b02013cc48a49fb2d462eab1fe928ac94a873e32488e19a72aa19fe14bd905f90a180801561065d5750815b61067a5761067a858560e001516201000060026104ea9190612578565b811561075f5783516040519081527f0ab3fed163812dd91308fe7c08654fe465e1bb623d4edc613b04f74f02a5cecb9060200160405180910390a16106c3620100006002612578565b845160a086015160c08701516040517fff418104000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff91821660248401526044830152919091169063ff418104906064015f604051808303815f87803b158015610744575f5ffd5b505af1158015610756573d5f5f3e3d5ffd5b505050506107f8565b61076d620100006002612578565b845160c08601516040517fba5a8f000000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff919091169063ba5a8f00906044015f604051808303815f87803b1580156107e1575f5ffd5b505af11580156107f3573d5f5f3e3d5ffd5b505050505b5f8261087d5761080c620100006003612578565b73ffffffffffffffffffffffffffffffffffffffff1663c438a9f26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610854573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108789190612b0f565b61087f565b5f5b6040519091507f66cafe1ba56fff897cde09ba23dc61dfb4506b0ca7b2176878c8f3833c6c6f05905f90a18180156108b45750825b6108d2576108d2868661010001516201000060036104ea9190612578565b82156109e5578451604080870151815192835260208301527f37d3d3430909c8516d9079ae81c44c3d581ca9c64bc869605862b45ad33c8025910160405180910390a1610923620100006003612578565b8551604080880151606089015160808901515160a08b015193517fcc06b5ca0000000000000000000000000000000000000000000000000000000081526004810195909552602485019290925273ffffffffffffffffffffffffffffffffffffffff90811660448501528581166064850152608484019190915290811660a4830152919091169063cc06b5ca9060c4015f604051808303815f87803b1580156109ca575f5ffd5b505af11580156109dc573d5f5f3e3d5ffd5b50505050610aa4565b6109f3620100006003612578565b8551604080880151606089015160808901515192517ff95f5c100000000000000000000000000000000000000000000000000000000081526004810194909452602484019190915273ffffffffffffffffffffffffffffffffffffffff908116604484015284811660648401526084830191909152919091169063f95f5c109060a4015f604051808303815f87803b158015610a8d575f5ffd5b505af1158015610a9f573d5f5f3e3d5ffd5b505050505b505050505050565b5f82610b3157610ac0620100006004612578565b73ffffffffffffffffffffffffffffffffffffffff166337d277d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2c9190612b0f565b610b33565b5f5b90505f83610bba57610b49620100006004612578565b73ffffffffffffffffffffffffffffffffffffffff16632149ed746040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb59190612b31565b610bbc565b5f5b6040519091507f2279abc0bad9e740d23d1d202b1ce182a6f4c75a99b666e5389045132336245e905f90a15f610c14838860a00151886040015189608001515f01518a606001515f01518b6060015160200151611870565b60405190915073ffffffffffffffffffffffffffffffffffffffff8216907fcbc6e12879d66272eab5298d63d544f5ed89696ab731bdb753657ee5c4c79360905f90a26040517ff2f9b371bebad6b8fd624e64200f8bb8e6e2d0f5c37519d77800e4b253e1badd905f90a1838015610c895750845b610ca757610ca7888861012001516201000060046104ea9190612578565b8415610e715786516040519081527f58a597758b538819761dc3a5c590c67513555cddadbb8f77c48559c1e6e58b729060200160405180910390a16102608701515f9073ffffffffffffffffffffffffffffffffffffffff16610dcc5784610d2357610d2389896101e0015162010000600b6104ea9190612578565b610d3162010000600b612578565b60a08901516040517f58dabd6200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116906358dabd62906024016020604051808303815f875af1158015610da1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc59190612b0f565b9050610dd4565b506102608701515b610de2620100006004612578565b73ffffffffffffffffffffffffffffffffffffffff1663cd0df286895f01518a60a001518b608001518b5f015186888e608001518f606001516040518963ffffffff1660e01b8152600401610e3e989796959493929190612bd8565b5f604051808303815f87803b158015610e55575f5ffd5b505af1158015610e67573d5f5f3e3d5ffd5b5050505050610f78565b5f610e80620100006003612578565b73ffffffffffffffffffffffffffffffffffffffff1663c438a9f26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eec9190612b0f565b9050610efc620100006004612578565b73ffffffffffffffffffffffffffffffffffffffff1663dfc3d230895f01518584868c608001518d606001516040518763ffffffff1660e01b8152600401610f4996959493929190612cae565b5f604051808303815f87803b158015610f60575f5ffd5b505af1158015610f72573d5f5f3e3d5ffd5b50505050505b6040517f6bb8ed2daea1acd4614be834c3189e774669fc43df54a27f2d6e2eff23d30e3d905f90a1838015610faa5750845b610fc857610fc88888610160015162010000600a6104ea9190612578565b84156110fc5786516040519081527faa08bd809ea091899962a8f1f381431d9de6ad1a31348a77d3fcac422e923c339060200160405180910390a161101162010000600a612578565b73ffffffffffffffffffffffffffffffffffffffff1663619a038c885f01518960a001516201000060026110459190612578565b611053620100006003612578565b611061620100006005612578565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b168152600481019590955273ffffffffffffffffffffffffffffffffffffffff938416602486015291831660448501528216606484015216608482015260a4015f604051808303815f87803b1580156110e1575f5ffd5b505af11580156110f3573d5f5f3e3d5ffd5b505050506111e5565b61110a62010000600a612578565b73ffffffffffffffffffffffffffffffffffffffff1663f1d9db33885f01516201000060026111399190612578565b611147620100006003612578565b611155620100006005612578565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b168152600481019490945273ffffffffffffffffffffffffffffffffffffffff928316602485015290821660448401521660648201526084015f604051808303815f87803b1580156111ce575f5ffd5b505af11580156111e0573d5f5f3e3d5ffd5b505050505b8380156111ef5750845b6112275761120d88886101c0015162010000600f6104ea9190612578565b6112278888610180015162010000600d6104ea9190612578565b84156112d85761123b62010000600d612578565b875160a08901516102808a01516040517f65143424000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff9182166024840152604483015291909116906365143424906064015f604051808303815f87803b1580156112bd575f5ffd5b505af11580156112cf573d5f5f3e3d5ffd5b50505050611374565b6112e662010000600d612578565b875160a08901516040517f3aef55ef000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff90811660248301529190911690633aef55ef906044015f604051808303815f87803b15801561135d575f5ffd5b505af115801561136f573d5f5f3e3d5ffd5b505050505b83801561137e5750845b61036d5761036d88886101a0015162010000600e6104ea9190612578565b6040517f704f08cc17579e7a79fe304fb350bfc995ff3a4a6f44eff9796bd68a97033958905f90a16113d2620100006002612578565b73ffffffffffffffffffffffffffffffffffffffff16635dd68acd6113fb620100006003612578565b8561140a620100006005612578565b61141862010000600a612578565b6102408801516040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff9586166004820152938516602485015291841660448401528316606483015291909116608482015260a4015f604051808303815f87803b1580156114a1575f5ffd5b505af11580156114b3573d5f5f3e3d5ffd5b5050505062010000600f6114c79190612578565b82516080830151516040517f1bafc42e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff9190911690631bafc42e906044015f604051808303815f87803b15801561153c575f5ffd5b505af115801561154e573d5f5f3e3d5ffd5b505050506201000060106115629190612578565b825160a08401516040517fa81a1197000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff9081166024830152919091169063a81a1197906044015f604051808303815f87803b1580156115d9575f5ffd5b505af11580156115eb573d5f5f3e3d5ffd5b505050506201000060046115ff9190612578565b73ffffffffffffffffffffffffffffffffffffffff16636e7f096e8260800151602001516040518263ffffffff1660e01b815260040161164191815260200190565b5f604051808303815f87803b158015611658575f5ffd5b505af115801561166a573d5f5f3e3d5ffd5b5050505062010000600e61167e9190612578565b82516040517ffdf736a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092169163fdf736a3916116d69160040190815260200190565b5f604051808303815f87803b1580156116ed575f5ffd5b505af11580156116ff573d5f5f3e3d5ffd5b50506040517fbe0ee1cd96fc00da7deaf9bd546736224fa6360ceb890f465085ed4763e484ae92505f9150a1505050565b8073ffffffffffffffffffffffffffffffffffffffff167f8d0f494ae330e899ced101b43d7b0149cf310295ad00dd7574a7e57097e7a70e846040516117769190612d76565b60405180910390a2600283600281111561179257611792612d49565b036117a6576117a18282611942565b61181d565b60018360028111156117ba576117ba612d49565b036117c9576117a18282611bab565b5f8360028111156117dc576117dc612d49565b036117eb576117a18282611f92565b6040517f1906f34600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f1ed299883184d41bc443fb35ddbede2c41750c6925fc325572ab58d4b4fb46e2846040516118639190612d76565b60405180910390a2505050565b5f73ffffffffffffffffffffffffffffffffffffffff871615611894575085611938565b5f836040516020016118a69190612dcc565b60405160208183030381529060405290505f836040516020016118c99190612dfd565b60405160208183030381529060405290505f6118e783838a8a612260565b90505f806118f9620100006007612578565b8b8460405161190790612461565b61191393929190612e2e565b8190604051809103905ff5905080158015611930573d5f5f3e3d5ffd5b509450505050505b9695505050505050565b606082511461197d576040517fc4dc267300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907fe5de1a8257fcd3ae0f0d35e77b6e40f73827df8f8c1fffca4475a47c66cb7e09905f90a25f5f5f6119c985612307565b6040805173ffffffffffffffffffffffffffffffffffffffff8916602482018190526044820186905263ffffffff949094166064820181905260848083018590528351808403909101815260a49092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff6eca0b0000000000000000000000000000000000000000000000000000000001790528351878152908101829052808401859052606081018290529251959850965091945085939192917f54081407efffc733191a7a058e7727f9f366a4d32e7b0996c7ddee4e2645f1ce916080908290030190a25f611ac46180006006612578565b73ffffffffffffffffffffffffffffffffffffffff1682604051611ae89190612e81565b5f604051808303815f865af19150503d805f8114611b21576040519150601f19603f3d011682016040523d82523d5f602084013e611b26565b606091505b5050905080611b61576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8816907f418317f13de341ecea4e9ea5438c4032d7952fdcd8feca0a36350f0373d8a934905f90a25050505050505050565b604082511015611be7576040517fc4dc267300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907fa5d955568eb44a5e03e0b3acf1ecf2fded74cb281bfc7b4986f1bb6ff9215933905f90a25f5f83806020019051810190611c3d9190612e8c565b915091505f8282604051602001611c55929190612ef1565b60405160208183030381529060405290508080519060200120858051906020012014611cad576040517fc4dc267300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611cb78461232b565b60405190915073ffffffffffffffffffffffffffffffffffffffff8216907f39095cab8e21b2bcd1ea261b709ad382b091a238378c0d4416bd7abe719ecb61905f90a28073ffffffffffffffffffffffffffffffffffffffff163b5f03611d2757611d22848261237c565b611d90565b803f5f611d3386612307565b92505050808214611d8d576040517f646ac57e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b50505b8473ffffffffffffffffffffffffffffffffffffffff163b5f03611e5c57611db8838661237c565b73ffffffffffffffffffffffffffffffffffffffff851663b5c2cb29611de262010000600c612578565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015f604051808303815f87803b158015611e45575f5ffd5b505af1158015611e57573d5f5f3e3d5ffd5b505050505b8073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fb45ba7c66bbc716346a4b8401f780f9f44179230c6305da484dcd7907213013460405160405180910390a3611ec462010000600c612578565b6040517f99a88ec400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152838116602483015291909116906399a88ec4906044015f604051808303815f87803b158015611f34575f5ffd5b505af1158015611f46573d5f5f3e3d5ffd5b505060405173ffffffffffffffffffffffffffffffffffffffff881692507ff91ab6c46d02f563819d97fe5b04e9e7b637f7387fc9f638fab70d5095b3a2e391505f90a2505050505050565b8073ffffffffffffffffffffffffffffffffffffffff167f2da74450c0b028d3ee98ad22861e8decc354307fbf7c38162d08f3c2c8a56eac83806020019051810190611fde9190612b31565b60405190815260200160405180910390a25f828060200190518101906120049190612b31565b6040805160018082528183019092529192505f9190816020015b6120646040518060a001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f8152602001606081525090565b81526020019060019003908161201e5790505090506040518060a001604052808381526020018473ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f815260200160405180602001604052805f815250815250815f815181106120d8576120d8612f15565b60200260200101819052505f816040516024016120f59190612f42565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe9f18c170000000000000000000000000000000000000000000000000000000017905290505f61217b6180006006612578565b73ffffffffffffffffffffffffffffffffffffffff168260405161219f9190612e81565b5f604051808303815f865af19150503d805f81146121d8576040519150601f19603f3d011682016040523d82523d5f602084013e6121dd565b606091505b5050905080612218576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8616907f845c2bf561a9c4806318da72b9bcf10088accc69cc39da77161bc1d8509a36ae905f90a2505050505050565b60608484612272620100006003612578565b8585604051602401612288959493929190613010565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa8c5f7ea0000000000000000000000000000000000000000000000000000000017905295945050505050565b5f5f5f8380602001905181019061231e9190613066565b9196909550909350915050565b6040515f9061234090829084906020016130a6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012092915050565b8073ffffffffffffffffffffffffffffffffffffffff81163b156123e5576040517f646ac57e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401611d84565b50808060ff73ffffffffffffffffffffffffffffffffffffffff821611612451576040517fb24b1ccb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401611d84565b5061245c8383611942565b505050565b61104b806130c083390190565b73ffffffffffffffffffffffffffffffffffffffff8116811461248f575f5ffd5b50565b5f5f83601f8401126124a2575f5ffd5b50813567ffffffffffffffff8111156124b9575f5ffd5b6020830191508360208285010111156124d0575f5ffd5b9250929050565b5f5f5f5f5f5f5f60a0888a0312156124ed575f5ffd5b873580151581146124fc575f5ffd5b96506020880135955060408801356125138161246e565b9450606088013567ffffffffffffffff81111561252e575f5ffd5b61253a8a828b01612492565b909550935050608088013567ffffffffffffffff811115612559575f5ffd5b6125658a828b01612492565b989b979a50959850939692959293505050565b73ffffffffffffffffffffffffffffffffffffffff81811683821601908111156125c9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516102a0810167ffffffffffffffff81118282101715612620576126206125cf565b60405290565b6040516060810167ffffffffffffffff81118282101715612620576126206125cf565b60405160a0810167ffffffffffffffff81118282101715612620576126206125cf565b80516126778161246e565b919050565b5f82601f83011261268b575f5ffd5b8151602083015f5f67ffffffffffffffff8411156126ab576126ab6125cf565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156126f8576126f86125cf565b60405283815290508082840187101561270f575f5ffd5b8383602083015e5f602085830101528094505050505092915050565b5f6020828403121561273b575f5ffd5b815167ffffffffffffffff811115612751575f5ffd5b82016102a08185031215612763575f5ffd5b61276b6125fc565b81518152602080830151908201526040808301519082015261278f6060830161266c565b6060820152608082810151908201526127aa60a0830161266c565b60a082015260c0828101519082015260e082015167ffffffffffffffff8111156127d2575f5ffd5b6127de8682850161267c565b60e08301525061010082015167ffffffffffffffff8111156127fe575f5ffd5b61280a8682850161267c565b6101008301525061012082015167ffffffffffffffff81111561282b575f5ffd5b6128378682850161267c565b6101208301525061014082015167ffffffffffffffff811115612858575f5ffd5b6128648682850161267c565b6101408301525061016082015167ffffffffffffffff811115612885575f5ffd5b6128918682850161267c565b6101608301525061018082015167ffffffffffffffff8111156128b2575f5ffd5b6128be8682850161267c565b610180830152506101a082015167ffffffffffffffff8111156128df575f5ffd5b6128eb8682850161267c565b6101a0830152506101c082015167ffffffffffffffff81111561290c575f5ffd5b6129188682850161267c565b6101c0830152506101e082015167ffffffffffffffff811115612939575f5ffd5b6129458682850161267c565b6101e083015250612959610200830161266c565b61020082015261296c610220830161266c565b61022082015261297f610240830161266c565b610240820152612992610260830161266c565b61026082015261028091820151918101919091529392505050565b5f606082840312156129bd575f5ffd5b6129c5612626565b825181526020808401519082015260408301519091506129e48161246e565b604082015292915050565b5f602082840312156129ff575f5ffd5b815167ffffffffffffffff811115612a15575f5ffd5b820160e08185031215612a26575f5ffd5b612a2e612649565b8151612a398161246e565b81526020820151612a498161246e565b60208201526040820151612a5c8161246e565b6040820152606082015167ffffffffffffffff811115612a7a575f5ffd5b820160608187031215612a8b575f5ffd5b612a93612626565b815167ffffffffffffffff811115612aa9575f5ffd5b612ab58882850161267c565b825250602082015167ffffffffffffffff811115612ad1575f5ffd5b612add8882850161267c565b602083015250604091820151918101919091526060820152612b0285608084016129ad565b6080820152949350505050565b5f60208284031215612b1f575f5ffd5b8151612b2a8161246e565b9392505050565b5f60208284031215612b41575f5ffd5b5051919050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f815160608452612ba86060850182612b48565b905060208301518482036020860152612bc18282612b48565b915050604083015160408501528091505092915050565b88815273ffffffffffffffffffffffffffffffffffffffff8816602082015286604082015273ffffffffffffffffffffffffffffffffffffffff8616606082015273ffffffffffffffffffffffffffffffffffffffff8516608082015273ffffffffffffffffffffffffffffffffffffffff841660a0820152612c8860c0820184805182526020808201519083015260409081015173ffffffffffffffffffffffffffffffffffffffff16910152565b6101406101208201525f612ca0610140830184612b94565b9a9950505050505050505050565b86815285602082015273ffffffffffffffffffffffffffffffffffffffff8516604082015273ffffffffffffffffffffffffffffffffffffffff84166060820152612d266080820184805182526020808201519083015260409081015173ffffffffffffffffffffffffffffffffffffffff16910152565b61010060e08201525f612d3d610100830184612b94565b98975050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020810160038310612daf577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f81518060208401855e5f93019283525090919050565b7f577261707065642000000000000000000000000000000000000000000000000081525f612b2a6008830184612db5565b7f570000000000000000000000000000000000000000000000000000000000000081525f612b2a6001830184612db5565b73ffffffffffffffffffffffffffffffffffffffff8416815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201525f612e786060830184612b48565b95945050505050565b5f612b2a8284612db5565b5f5f60408385031215612e9d575f5ffd5b825167ffffffffffffffff811115612eb3575f5ffd5b612ebf8582860161267c565b925050602083015167ffffffffffffffff811115612edb575f5ffd5b612ee78582860161267c565b9150509250929050565b604081525f612f036040830185612b48565b8281036020840152612e788185612b48565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613004577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051865273ffffffffffffffffffffffffffffffffffffffff6020820151166020870152604081015115156040870152606081015160608701526080810151905060a06080870152612fee60a0870182612b48565b9550506020938401939190910190600101612f68565b50929695505050505050565b60a081525f61302260a0830188612b48565b82810360208401526130348188612b48565b73ffffffffffffffffffffffffffffffffffffffff968716604085015294909516606083015250608001529392505050565b5f5f5f60608486031215613078575f5ffd5b8351602085015190935063ffffffff81168114613093575f5ffd5b6040949094015192959394509192915050565b8281525f6130b76020830184612db5565b94935050505056fe608060405260405161104b38038061104b833981016040819052610022916103c3565b828161002f82825f610043565b5061003b90508261006e565b5050506104df565b61004c836100db565b5f825111806100585750805b1561006957610067838361011a565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6100ad5f5160206110045f395f51905f52546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a16100d881610146565b50565b6100e4816101e1565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061013f838360405180606001604052806027815260200161102460279139610275565b9392505050565b6001600160a01b0381166101b05760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b805f5160206110045f395f51905f525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61024e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016101a7565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101c0565b60605f5f856001600160a01b0316856040516102919190610494565b5f60405180830381855af49150503d805f81146102c9576040519150601f19603f3d011682016040523d82523d5f602084013e6102ce565b606091505b5090925090506102e0868383876102ea565b9695505050505050565b606083156103585782515f03610351576001600160a01b0385163b6103515760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101a7565b5081610362565b610362838361036a565b949350505050565b81511561037a5781518083602001fd5b8060405162461bcd60e51b81526004016101a791906104aa565b80516001600160a01b03811681146103aa575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156103d5575f5ffd5b6103de84610394565b92506103ec60208501610394565b60408501519092506001600160401b03811115610407575f5ffd5b8401601f81018613610417575f5ffd5b80516001600160401b03811115610430576104306103af565b604051601f8201601f19908116603f011681016001600160401b038111828210171561045e5761045e6103af565b604052818152828201602001881015610475575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b610b18806104ec5f395ff3fe60806040523661001357610011610017565b005b6100115b61001f6102a0565b73ffffffffffffffffffffffffffffffffffffffff1633036102965760607fffffffff000000000000000000000000000000000000000000000000000000005f35167fc9a6301a000000000000000000000000000000000000000000000000000000008101610097576100906102df565b915061028e565b7fb0e10d7a000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016100e857610090610332565b7f70d7c690000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160161013957610090610376565b7f07ae5bc0000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160161018a576100906103a6565b7fa39f25e5000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016101db576100906103f2565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b815160208301f35b61029e610405565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b60606102e9610415565b5f6102f736600481846108bc565b810190610304919061090b565b905061031f8160405180602001604052805f8152505f61041f565b505060408051602081019091525f815290565b60605f8061034336600481846108bc565b8101906103509190610951565b915091506103608282600161041f565b60405180602001604052805f8152509250505090565b6060610380610415565b5f61038e36600481846108bc565b81019061039b919061090b565b905061031f8161044a565b60606103b0610415565b5f6103b96102a0565b6040805173ffffffffffffffffffffffffffffffffffffffff831660208201529192500160405160208183030381529060405291505090565b60606103fc610415565b5f6103b96104ae565b61029e6104106104ae565b6104bc565b341561029e575f5ffd5b610428836104da565b5f825111806104345750805b15610445576104438383610526565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104736102a0565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16104ab81610552565b50565b5f6104b761065e565b905090565b365f5f375f5f365f845af43d5f5f3e8080156104d6573d5ff35b3d5ffd5b6104e381610685565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061054b8383604051806060016040528060278152602001610abc60279139610750565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81166105f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610285565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102c3565b73ffffffffffffffffffffffffffffffffffffffff81163b610729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610285565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610618565b60605f5f8573ffffffffffffffffffffffffffffffffffffffff16856040516107799190610a52565b5f60405180830381855af49150503d805f81146107b1576040519150601f19603f3d011682016040523d82523d5f602084013e6107b6565b606091505b50915091506107c7868383876107d1565b9695505050505050565b606083156108665782515f0361085f5773ffffffffffffffffffffffffffffffffffffffff85163b61085f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610285565b5081610870565b6108708383610878565b949350505050565b8151156108885781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102859190610a68565b5f5f858511156108ca575f5ffd5b838611156108d6575f5ffd5b5050820193919092039150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610906575f5ffd5b919050565b5f6020828403121561091b575f5ffd5b61054b826108e3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f5f60408385031215610962575f5ffd5b61096b836108e3565b9150602083013567ffffffffffffffff811115610986575f5ffd5b8301601f81018513610996575f5ffd5b803567ffffffffffffffff8111156109b0576109b0610924565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715610a1c57610a1c610924565b604052818152828201602001871015610a33575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e0caaecc6def8aef0cc1807b5cde21cdd37c32cd9aace965af85dd9900dd8b9364736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206d26bbdbfed336c82ea549a669269731f65beb0e460d2488fd63b9a618d907ec64736f6c634300081c0033" ], [ "0x0000000000000000000000000000000000010007", @@ -18,55 +18,55 @@ ], [ "0xd704e29df32c189b8613f79fcc043b2dc01d5f53", - "0x608060405260043610610033575f3560e01c8063480d118514610037578063c987336c1461004c578063d8cfca801461005f575b5f5ffd5b61004a61004536600461108c565b610072565b005b61004a61005a36600461110d565b610170565b61004a61006d36600461108c565b6102c3565b61007f618000600761115c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146100ea576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6100f7618000600661115c565b73ffffffffffffffffffffffffffffffffffffffff1663e9f18c1786866040518363ffffffff1660e01b815260040161013192919061125a565b5f604051808303815f87803b158015610148575f5ffd5b505af115801561015a573d5f5f3e3d5ffd5b50505050610169838383610170565b5050505050565b61017d618000600761115c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101e3576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016100e1565b8273ffffffffffffffffffffffffffffffffffffffff163b5f0361024b576040517f86bb51b800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016100e1565b5f5f8473ffffffffffffffffffffffffffffffffffffffff168484604051610274929190611374565b5f60405180830381855af49150503d805f81146102ac576040519150601f19603f3d011682016040523d82523d5f602084013e6102b1565b606091505b50915091508161016957805160208201fd5b6102d0618000600761115c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610336576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016100e1565b5f5b8481101561041f5761041786868381811061035557610355611383565b905060200281019061036791906113b0565b6103759060208101906113ec565b87878481811061038757610387611383565b905060200281019061039991906113b0565b6103a7906020810190611411565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508b92508a91508690508181106103ef576103ef611383565b905060200281019061040191906113b0565b610412906060810190604001611472565b61042b565b600101610338565b50610169838383610170565b8073ffffffffffffffffffffffffffffffffffffffff167f8d0f494ae330e899ced101b43d7b0149cf310295ad00dd7574a7e57097e7a70e8460405161047191906114b8565b60405180910390a2600283600281111561048d5761048d61148b565b036104a15761049c828261056b565b610518565b60018360028111156104b5576104b561148b565b036104c45761049c82826107d4565b5f8360028111156104d7576104d761148b565b036104e65761049c8282610bb6565b6040517f1906f34600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f1ed299883184d41bc443fb35ddbede2c41750c6925fc325572ab58d4b4fb46e28460405161055e91906114b8565b60405180910390a2505050565b60608251146105a6576040517fc4dc267300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907fe5de1a8257fcd3ae0f0d35e77b6e40f73827df8f8c1fffca4475a47c66cb7e09905f90a25f5f5f6105f285610e84565b6040805173ffffffffffffffffffffffffffffffffffffffff8916602482018190526044820186905263ffffffff949094166064820181905260848083018590528351808403909101815260a49092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff6eca0b0000000000000000000000000000000000000000000000000000000001790528351878152908101829052808401859052606081018290529251959850965091945085939192917f54081407efffc733191a7a058e7727f9f366a4d32e7b0996c7ddee4e2645f1ce916080908290030190a25f6106ed618000600661115c565b73ffffffffffffffffffffffffffffffffffffffff1682604051610711919061150e565b5f604051808303815f865af19150503d805f811461074a576040519150601f19603f3d011682016040523d82523d5f602084013e61074f565b606091505b505090508061078a576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8816907f418317f13de341ecea4e9ea5438c4032d7952fdcd8feca0a36350f0373d8a934905f90a25050505050505050565b604082511015610810576040517fc4dc267300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907fa5d955568eb44a5e03e0b3acf1ecf2fded74cb281bfc7b4986f1bb6ff9215933905f90a25f5f83806020019051810190610866919061160e565b915091505f828260405160200161087e9291906116bf565b604051602081830303815290604052905080805190602001208580519060200120146108d6576040517fc4dc267300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6108e084610ea8565b60405190915073ffffffffffffffffffffffffffffffffffffffff8216907f39095cab8e21b2bcd1ea261b709ad382b091a238378c0d4416bd7abe719ecb61905f90a28073ffffffffffffffffffffffffffffffffffffffff163b5f036109505761094b8482610ef9565b6109b4565b803f5f61095c86610e84565b925050508082146109b1576040517f646ac57e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016100e1565b50505b8473ffffffffffffffffffffffffffffffffffffffff163b5f03610a80576109dc8386610ef9565b73ffffffffffffffffffffffffffffffffffffffff851663b5c2cb29610a0662010000600c61115c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015f604051808303815f87803b158015610a69575f5ffd5b505af1158015610a7b573d5f5f3e3d5ffd5b505050505b8073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fb45ba7c66bbc716346a4b8401f780f9f44179230c6305da484dcd7907213013460405160405180910390a3610ae862010000600c61115c565b6040517f99a88ec400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152838116602483015291909116906399a88ec4906044015f604051808303815f87803b158015610b58575f5ffd5b505af1158015610b6a573d5f5f3e3d5ffd5b505060405173ffffffffffffffffffffffffffffffffffffffff881692507ff91ab6c46d02f563819d97fe5b04e9e7b637f7387fc9f638fab70d5095b3a2e391505f90a2505050505050565b8073ffffffffffffffffffffffffffffffffffffffff167f2da74450c0b028d3ee98ad22861e8decc354307fbf7c38162d08f3c2c8a56eac83806020019051810190610c0291906116ec565b60405190815260200160405180910390a25f82806020019051810190610c2891906116ec565b6040805160018082528183019092529192505f9190816020015b610c886040518060a001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f8152602001606081525090565b815260200190600190039081610c425790505090506040518060a001604052808381526020018473ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f815260200160405180602001604052805f815250815250815f81518110610cfc57610cfc611383565b60200260200101819052505f81604051602401610d199190611703565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe9f18c170000000000000000000000000000000000000000000000000000000017905290505f610d9f618000600661115c565b73ffffffffffffffffffffffffffffffffffffffff1682604051610dc3919061150e565b5f604051808303815f865af19150503d805f8114610dfc576040519150601f19603f3d011682016040523d82523d5f602084013e610e01565b606091505b5050905080610e3c576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8616907f845c2bf561a9c4806318da72b9bcf10088accc69cc39da77161bc1d8509a36ae905f90a2505050505050565b5f5f5f83806020019051810190610e9b91906117d1565b9196909550909350915050565b6040515f90610ebd9082908490602001611811565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012092915050565b8073ffffffffffffffffffffffffffffffffffffffff81163b15610f62576040517f646ac57e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016100e1565b50808060ff73ffffffffffffffffffffffffffffffffffffffff821611610fce576040517fb24b1ccb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016100e1565b50610fd9838361056b565b505050565b5f5f83601f840112610fee575f5ffd5b50813567ffffffffffffffff811115611005575f5ffd5b6020830191508360208260051b850101111561101f575f5ffd5b9250929050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611049575f5ffd5b919050565b5f5f83601f84011261105e575f5ffd5b50813567ffffffffffffffff811115611075575f5ffd5b60208301915083602082850101111561101f575f5ffd5b5f5f5f5f5f606086880312156110a0575f5ffd5b853567ffffffffffffffff8111156110b6575f5ffd5b6110c288828901610fde565b90965094506110d5905060208701611026565b9250604086013567ffffffffffffffff8111156110f0575f5ffd5b6110fc8882890161104e565b969995985093965092949392505050565b5f5f5f6040848603121561111f575f5ffd5b61112884611026565b9250602084013567ffffffffffffffff811115611143575f5ffd5b61114f8682870161104e565b9497909650939450505050565b73ffffffffffffffffffffffffffffffffffffffff81811683821601908111156111ad577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b92915050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126111e6575f5ffd5b830160208101925035905067ffffffffffffffff811115611205575f5ffd5b80360382131561101f575f5ffd5b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602080825281018290525f6040600584901b8301810190830185837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6136839003015b87821015611367577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845282358181126112d8575f5ffd5b89018035865273ffffffffffffffffffffffffffffffffffffffff6112ff60208301611026565b1660208701526040810135801515808214611318575f5ffd5b6040880152506060818101359087015261133560808201826111b3565b915060a0608088015261134c60a088018383611213565b9650505060208301925060208401935060018201915061129c565b5092979650505050505050565b818382375f9101908152919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18336030181126113e2575f5ffd5b9190910192915050565b5f602082840312156113fc575f5ffd5b81356003811061140a575f5ffd5b9392505050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611444575f5ffd5b83018035915067ffffffffffffffff82111561145e575f5ffd5b60200191503681900382131561101f575f5ffd5b5f60208284031215611482575f5ffd5b61140a82611026565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600383106114f1577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f81518060208401855e5f93019283525090919050565b5f61140a82846114f7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112611555575f5ffd5b815167ffffffffffffffff81111561156f5761156f611519565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156115db576115db611519565b6040528181528382016020018510156115f2575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f6040838503121561161f575f5ffd5b825167ffffffffffffffff811115611635575f5ffd5b61164185828601611546565b925050602083015167ffffffffffffffff81111561165d575f5ffd5b61166985828601611546565b9150509250929050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f6116d16040830185611673565b82810360208401526116e38185611673565b95945050505050565b5f602082840312156116fc575f5ffd5b5051919050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156117c5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051865273ffffffffffffffffffffffffffffffffffffffff6020820151166020870152604081015115156040870152606081015160608701526080810151905060a060808701526117af60a0870182611673565b9550506020938401939190910190600101611729565b50929695505050505050565b5f5f5f606084860312156117e3575f5ffd5b8351602085015190935063ffffffff811681146117fe575f5ffd5b6040949094015192959394509192915050565b8281525f61182260208301846114f7565b94935050505056fea26469706673582212209a5b4fc562082f426ebba9da058986548a4778b9a792798fa7565eafb8024c9a64736f6c634300081c0033" + "0x608060405260043610610033575f3560e01c8063480d118514610037578063c987336c1461004c578063d8cfca801461005f575b5f5ffd5b61004a61004536600461108c565b610072565b005b61004a61005a36600461110d565b610170565b61004a61006d36600461108c565b6102c3565b61007f618000600761115c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146100ea576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6100f7618000600661115c565b73ffffffffffffffffffffffffffffffffffffffff1663e9f18c1786866040518363ffffffff1660e01b815260040161013192919061125a565b5f604051808303815f87803b158015610148575f5ffd5b505af115801561015a573d5f5f3e3d5ffd5b50505050610169838383610170565b5050505050565b61017d618000600761115c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101e3576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016100e1565b8273ffffffffffffffffffffffffffffffffffffffff163b5f0361024b576040517f86bb51b800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016100e1565b5f5f8473ffffffffffffffffffffffffffffffffffffffff168484604051610274929190611374565b5f60405180830381855af49150503d805f81146102ac576040519150601f19603f3d011682016040523d82523d5f602084013e6102b1565b606091505b50915091508161016957805160208201fd5b6102d0618000600761115c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610336576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016100e1565b5f5b8481101561041f5761041786868381811061035557610355611383565b905060200281019061036791906113b0565b6103759060208101906113ec565b87878481811061038757610387611383565b905060200281019061039991906113b0565b6103a7906020810190611411565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508b92508a91508690508181106103ef576103ef611383565b905060200281019061040191906113b0565b610412906060810190604001611472565b61042b565b600101610338565b50610169838383610170565b8073ffffffffffffffffffffffffffffffffffffffff167f8d0f494ae330e899ced101b43d7b0149cf310295ad00dd7574a7e57097e7a70e8460405161047191906114b8565b60405180910390a2600283600281111561048d5761048d61148b565b036104a15761049c828261056b565b610518565b60018360028111156104b5576104b561148b565b036104c45761049c82826107d4565b5f8360028111156104d7576104d761148b565b036104e65761049c8282610bb6565b6040517f1906f34600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f1ed299883184d41bc443fb35ddbede2c41750c6925fc325572ab58d4b4fb46e28460405161055e91906114b8565b60405180910390a2505050565b60608251146105a6576040517fc4dc267300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907fe5de1a8257fcd3ae0f0d35e77b6e40f73827df8f8c1fffca4475a47c66cb7e09905f90a25f5f5f6105f285610e84565b6040805173ffffffffffffffffffffffffffffffffffffffff8916602482018190526044820186905263ffffffff949094166064820181905260848083018590528351808403909101815260a49092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff6eca0b0000000000000000000000000000000000000000000000000000000001790528351878152908101829052808401859052606081018290529251959850965091945085939192917f54081407efffc733191a7a058e7727f9f366a4d32e7b0996c7ddee4e2645f1ce916080908290030190a25f6106ed618000600661115c565b73ffffffffffffffffffffffffffffffffffffffff1682604051610711919061150e565b5f604051808303815f865af19150503d805f811461074a576040519150601f19603f3d011682016040523d82523d5f602084013e61074f565b606091505b505090508061078a576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8816907f418317f13de341ecea4e9ea5438c4032d7952fdcd8feca0a36350f0373d8a934905f90a25050505050505050565b604082511015610810576040517fc4dc267300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907fa5d955568eb44a5e03e0b3acf1ecf2fded74cb281bfc7b4986f1bb6ff9215933905f90a25f5f83806020019051810190610866919061160e565b915091505f828260405160200161087e9291906116bf565b604051602081830303815290604052905080805190602001208580519060200120146108d6576040517fc4dc267300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6108e084610ea8565b60405190915073ffffffffffffffffffffffffffffffffffffffff8216907f39095cab8e21b2bcd1ea261b709ad382b091a238378c0d4416bd7abe719ecb61905f90a28073ffffffffffffffffffffffffffffffffffffffff163b5f036109505761094b8482610ef9565b6109b4565b803f5f61095c86610e84565b925050508082146109b1576040517f646ac57e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016100e1565b50505b8473ffffffffffffffffffffffffffffffffffffffff163b5f03610a80576109dc8386610ef9565b73ffffffffffffffffffffffffffffffffffffffff851663b5c2cb29610a0662010000600c61115c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015f604051808303815f87803b158015610a69575f5ffd5b505af1158015610a7b573d5f5f3e3d5ffd5b505050505b8073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fb45ba7c66bbc716346a4b8401f780f9f44179230c6305da484dcd7907213013460405160405180910390a3610ae862010000600c61115c565b6040517f99a88ec400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152838116602483015291909116906399a88ec4906044015f604051808303815f87803b158015610b58575f5ffd5b505af1158015610b6a573d5f5f3e3d5ffd5b505060405173ffffffffffffffffffffffffffffffffffffffff881692507ff91ab6c46d02f563819d97fe5b04e9e7b637f7387fc9f638fab70d5095b3a2e391505f90a2505050505050565b8073ffffffffffffffffffffffffffffffffffffffff167f2da74450c0b028d3ee98ad22861e8decc354307fbf7c38162d08f3c2c8a56eac83806020019051810190610c0291906116ec565b60405190815260200160405180910390a25f82806020019051810190610c2891906116ec565b6040805160018082528183019092529192505f9190816020015b610c886040518060a001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f8152602001606081525090565b815260200190600190039081610c425790505090506040518060a001604052808381526020018473ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f815260200160405180602001604052805f815250815250815f81518110610cfc57610cfc611383565b60200260200101819052505f81604051602401610d199190611703565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe9f18c170000000000000000000000000000000000000000000000000000000017905290505f610d9f618000600661115c565b73ffffffffffffffffffffffffffffffffffffffff1682604051610dc3919061150e565b5f604051808303815f865af19150503d805f8114610dfc576040519150601f19603f3d011682016040523d82523d5f602084013e610e01565b606091505b5050905080610e3c576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8616907f845c2bf561a9c4806318da72b9bcf10088accc69cc39da77161bc1d8509a36ae905f90a2505050505050565b5f5f5f83806020019051810190610e9b91906117d1565b9196909550909350915050565b6040515f90610ebd9082908490602001611811565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012092915050565b8073ffffffffffffffffffffffffffffffffffffffff81163b15610f62576040517f646ac57e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016100e1565b50808060ff73ffffffffffffffffffffffffffffffffffffffff821611610fce576040517fb24b1ccb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016100e1565b50610fd9838361056b565b505050565b5f5f83601f840112610fee575f5ffd5b50813567ffffffffffffffff811115611005575f5ffd5b6020830191508360208260051b850101111561101f575f5ffd5b9250929050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611049575f5ffd5b919050565b5f5f83601f84011261105e575f5ffd5b50813567ffffffffffffffff811115611075575f5ffd5b60208301915083602082850101111561101f575f5ffd5b5f5f5f5f5f606086880312156110a0575f5ffd5b853567ffffffffffffffff8111156110b6575f5ffd5b6110c288828901610fde565b90965094506110d5905060208701611026565b9250604086013567ffffffffffffffff8111156110f0575f5ffd5b6110fc8882890161104e565b969995985093965092949392505050565b5f5f5f6040848603121561111f575f5ffd5b61112884611026565b9250602084013567ffffffffffffffff811115611143575f5ffd5b61114f8682870161104e565b9497909650939450505050565b73ffffffffffffffffffffffffffffffffffffffff81811683821601908111156111ad577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b92915050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126111e6575f5ffd5b830160208101925035905067ffffffffffffffff811115611205575f5ffd5b80360382131561101f575f5ffd5b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602080825281018290525f6040600584901b8301810190830185837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6136839003015b87821015611367577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845282358181126112d8575f5ffd5b89018035865273ffffffffffffffffffffffffffffffffffffffff6112ff60208301611026565b1660208701526040810135801515808214611318575f5ffd5b6040880152506060818101359087015261133560808201826111b3565b915060a0608088015261134c60a088018383611213565b9650505060208301925060208401935060018201915061129c565b5092979650505050505050565b818382375f9101908152919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18336030181126113e2575f5ffd5b9190910192915050565b5f602082840312156113fc575f5ffd5b81356003811061140a575f5ffd5b9392505050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611444575f5ffd5b83018035915067ffffffffffffffff82111561145e575f5ffd5b60200191503681900382131561101f575f5ffd5b5f60208284031215611482575f5ffd5b61140a82611026565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600383106114f1577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f81518060208401855e5f93019283525090919050565b5f61140a82846114f7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112611555575f5ffd5b815167ffffffffffffffff81111561156f5761156f611519565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156115db576115db611519565b6040528181528382016020018510156115f2575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f6040838503121561161f575f5ffd5b825167ffffffffffffffff811115611635575f5ffd5b61164185828601611546565b925050602083015167ffffffffffffffff81111561165d575f5ffd5b61166985828601611546565b9150509250929050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f6116d16040830185611673565b82810360208401526116e38185611673565b95945050505050565b5f602082840312156116fc575f5ffd5b5051919050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156117c5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051865273ffffffffffffffffffffffffffffffffffffffff6020820151166020870152604081015115156040870152606081015160608701526080810151905060a060808701526117af60a0870182611673565b9550506020938401939190910190600101611729565b50929695505050505050565b5f5f5f606084860312156117e3575f5ffd5b8351602085015190935063ffffffff811681146117fe575f5ffd5b6040949094015192959394509192915050565b8281525f61182260208301846114f7565b94935050505056fea2646970667358221220996916fa03376b68e86062fa0ec2e5e7252fcd58ef13db1d87b11c6d2f2bda3464736f6c634300081c0033" ], [ "0x0000000000000000000000000000000000010005", - "0x608060405234801561000f575f5ffd5b50600436106101bb575f3560e01c80635d4edca7116100f3578063ba5a8f0011610093578063e896760d1161006e578063e896760d1461044c578063ed1d7d971461045f578063f688e0031461047e578063fb644fc51461049d575f5ffd5b8063ba5a8f001461041d578063da24b3ee14610430578063e02e1bfd14610443575f5ffd5b806379cf6165116100ce57806379cf6165146103b45780639e59a37e146103c7578063b1fde1a8146103e7578063b8776d4d1461040a575f5ffd5b80635d4edca71461036157806366e8a86b1461038e578063685143b9146103a1575f5ffd5b80632f67101d1161015e57806336747fe51161013957806336747fe5146103125780633977d71c1461032757806347b78c1d1461032f57806348ceb85e14610342575f5ffd5b80632f67101d146102825780632f90b184146102f7578063353d7128146102ff575f5ffd5b80631e4fba05116101995780631e4fba05146102285780632b12011d1461023b5780632c3addb8146102445780632e9b5cbb14610263575f5ffd5b80630d81513b146101bf5780631496c5ce146101db57806318b7fc2214610205575b5f5ffd5b6101c8600d5481565b6040519081526020015b60405180910390f35b6101c86101e9366004612514565b600c60209081525f928352604080842090915290825290205481565b610218610213366004612575565b6104b0565b60405190151581526020016101d2565b6101c86102363660046125ff565b6104dc565b6101c860335481565b6101c86102523660046125ff565b60086020525f908152604090205481565b6101c86102713660046125ff565b60096020525f908152604090205481565b610295610290366004612616565b610538565b6040516101d291905f61010082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e0830151151560e083015292915050565b6032546101c8565b61021861030d36600461265d565b610588565b610325610320366004612514565b6105a6565b005b6101c86106f9565b61032561033d366004612514565b610737565b6101c86103503660046125ff565b60026020525f908152604090205481565b6103696107d0565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b61032561039c366004612514565b6107df565b6102186103af3660046126ca565b6108ad565b6102186103c2366004612616565b6109cc565b6103da6103d53660046125ff565b6109db565b6040516101d29190612701565b6004546005546103f5919082565b604080519283526020830191909152016101d2565b6102186104183660046125ff565b610a35565b61032561042b366004612514565b610a53565b61021861043e366004612759565b610ace565b6101c860015481565b61021861045a3660046127e4565b610af9565b6101c861046d3660046125ff565b60036020525f908152604090205481565b6101c861048c3660046125ff565b600b6020525f908152604090205481565b6103256104ab36600461285d565b610b0f565b5f6104cf8787876104c86104c38961296f565b610bfd565b8787610cb3565b90505b9695505050505050565b5f6104e682610a35565b61051c576040517f913183d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260086020526040902061053290610cda565b92915050565b61057a6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f151581525090565b6104cf878787878787610cfe565b5f61059888888888888888610fcd565b90505b979650505050505050565b6105ae6107d0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561061c57506105ec611066565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610692573361062a6107d0565b610632611066565b6040517f2d39667400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152918316602483015290911660448201526064015b60405180910390fd5b5f828152600b6020526040902054829082908110156106e6576040517fbe26346300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610689565b50505f918252600b602052604090912055565b5f6001545f0361072857507f46700b4d40ac5c35af2c22dda2787a91eb567b06c924a8fb8ae9a05b20c08c2190565b6107326004611075565b905090565b61073f6110b7565b61074c618000600f612a7b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107b2576040517fcbd9d2e0000000000000000000000000000000000000000000000000000000008152336004820152602401610689565b6107ba61111a565b6107c48282610a53565b6107cc611220565b5050565b5f610732620100006002612a7b565b6107e76107d0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156108555750610825611066565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610863573361062a6107d0565b61086c82610a35565b156108a3576040517f65e8a01900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107cc8282611252565b5f5f60405180606001604052808460800160208101906108cd9190612aa7565b61ffff1681526020016108e66080860160608701612ac0565b73ffffffffffffffffffffffffffffffffffffffff16815260200161090e60a0860186612adb565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509152509050306318b7fc228435602086013560408701358561096560c08a018a612b3c565b6040518763ffffffff1660e01b815260040161098696959493929190612be9565b602060405180830381865afa1580156109a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c59190612ca7565b9392505050565b5f6104cf878787878787611347565b60606109e682610a35565b610a1c576040517f913183d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f828152600260205260409020546109c5600482611357565b5f468214806105325750505f90815260026020526040902054151590565b610a60618000600f612a7b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac6576040517fcbd9d2e0000000000000000000000000000000000000000000000000000000008152336004820152602401610689565b603355603255565b5f5f610adb868a85611570565b9050610aeb8a8989848989610cb3565b9a9950505050505050505050565b5f6104cf8787876104c836899003890189612cc2565b610b1a838383611614565b5f610b3b610b2883856119e4565b5f86815260086020526040902090611a3f565b60405184815290925084915085907f4f7fd9ed016150a623d5a2cf43053fe313a56293a77e060a05db49ed225795209060200160405180910390a35f610b818286611bc5565b5f8681526002602052604081205491925090610ba09060049084611c06565b604080518581526020810185905291925087917f55f052ace108bbb0a540b328ff35be177a5c1d1f6e1e1adb46c1fa4bdaa69c10910160405180910390a2610be781611df8565b435f908152600960205260409020555050505050565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101919091526040805160c0810182525f815260016020820152835161ffff169181019190915260608101610c606180006008612a7b565b73ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff165f1b81526020018360400151805190602001208152509050919050565b5f5f610cbe85611e8a565b9050610cce888888848888611347565b98975050505050505050565b600180820180545f92610cf79291610cf29190612d42565b611f6f565b5492915050565b610d406040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f151581525090565b5f829003610d7a576040517f8e23ac1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f8d5411ba4a61cbb507591adfdbe3b8bb500d912bee0b3b4ff0750f652525bc468401610dd3576040517fd356e6ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610dde8484611f83565b805160c0840181905260208201519192505f91610e1391610e0c9188918891610e079082612d55565b6120ae565b8888612151565b905081602001518360c001818151610e2b9190612d55565b90525060808301819052606082018051151560e08501525115610e4f5750506104d2565b5f610e5a828a6119e4565b90505f86868660c00151818110610e7357610e73612d68565b905060200201355f1c90508460c0018051610e8d90612d95565b905260c085015160408501515f91610eb991610eb2918b918b9190610e079082612d55565b8385612151565b905084604001518660c001818151610ed19190612d55565b905250610ede818d611bc5565b8660a0018181525050505050505f5f5f5f87878760c00151818110610f0557610f05612d68565b905060200201355f1c90508560c0018051610f1f90612d95565b905260c0860151608082901c93506fffffffffffffffffffffffffffffffff8216925088908890818110610f5557610f55612d68565b905060200201355f1c93508560c0018051610f6f90612d95565b90525060408051610100810182529384526020840192909252828201528201516060808301919091526080848101519083015260a0808501519083015260c09384015193820193909352910151151560e08201529695505050505050565b5f5f610fdd898989898989610cfe565b90508060e0015115611011575f610ff48a8a6121ee565b905081608001518114801561100857508015155b9250505061059b565b8260010361104b576040517f68d91b4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611059898983888888612254565b9998505050505050505050565b5f61073262010000600a612a7b565b5f81600201825f01548154811061108e5761108e612d68565b905f5260205f20015f815481106110a7576110a7612d68565b905f5260205f2001549050919050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4805460019091558015611117576040517fdf3a8fdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f54610100900460ff16156111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960448201527f616c697a696e67000000000000000000000000000000000000000000000000006064820152608401610689565b5f5460ff9081161461121e575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61124b60047f46700b4d40ac5c35af2c22dda2787a91eb567b06c924a8fb8ae9a05b20c08c21612287565b5061121e465f5b60018054905f61126183612d95565b909155505f83815260026020818152604080842085905584845260038252808420879055868452600b82528084208690556008825283208381559182018054600180820183559185528285207f46700b4d40ac5c35af2c22dda2787a91eb567b06c924a8fb8ae9a05b20c08c219101559182018054928301815583528220018190555f6112f96112f18387611bc5565b6004906122d4565b905082857f5d96eda109bfd71cf9f4f70c83de31c4150760e8828979a95d9e5f9f15455af760405160405180910390a361133281611df8565b435f9081526009602052604090205550505050565b5f6104cf8787878787875f610fcd565b606082600101545f03611396576040517fc33e612800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600184600101546113a89190612d42565b9050808311156113ee576040517f1b582fcf0000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610689565b83545f9067ffffffffffffffff81111561140a5761140a612886565b604051908082528060200260200182016040528015611433578160200160208202803683370190505b5090505f5b85548110156115675761144c600286612df9565b5f036114e3578483146114a15785600201818154811061146e5761146e612d68565b905f5260205f20018560016114839190612d55565b8154811061149357611493612d68565b905f5260205f2001546114c0565b8560030181815481106114b6576114b6612d68565b905f5260205f2001545b8282815181106114d2576114d2612d68565b602002602001018181525050611545565b8560020181815481106114f8576114f8612d68565b905f5260205f200160018661150d9190612d42565b8154811061151d5761151d612d68565b905f5260205f20015482828151811061153857611538612d68565b6020026020010181815250505b611550600286612e0c565b945061155d600284612e0c565b9250600101611438565b50949350505050565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101919091526040518060c001604052805f60ff1681526020016001151581526020018561ffff16815260200161800060016115d79190612a7b565b73ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183600181111561160a5761160a612e1f565b9052949350505050565b8261161e60325490565b46146116ca57611632620100006010612a7b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116c55733611673620100006010612a7b565b6040517f3db511f400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610689565b611851565b6116d26107d0565b73ffffffffffffffffffffffffffffffffffffffff1663e680c4c1826040518263ffffffff1660e01b815260040161170c91815260200190565b602060405180830381865afa158015611727573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174b9190612e4c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461185157336117866107d0565b73ffffffffffffffffffffffffffffffffffffffff1663e680c4c1836040518263ffffffff1660e01b81526004016117c091815260200190565b602060405180830381865afa1580156117db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ff9190612e4c565b6040517f73fe6c1b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610689565b61185a84610a35565b611890576040517f913183d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816118c7576040517f655c373c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f848152600c602090815260408083208684529091529020548490849015611924576040517fbe26346300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610689565b50505f848152600b602052604081205461193f906001612d55565b90508484808314611985576040517f366c42f800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610689565b50505f858152600c60209081526040808320878452909152808220859055518491869188917f4e7f63ba2aa632b5a8e84262f2c749110bbb3ea0317bf2260e7fca7bb9de809691a45f948552600b602052604090942093909355505050565b604080517fd82fec4a37cbdc47f1e5cc4ad64deacf34a48e6f7c61fa5b68fd58e543259cf46020820152908101839052606081018290525f906080015b60405160208183030381529060405280519060200120905092915050565b5f5f5f60018560020180549050611a569190612d42565b8554909150855f611a6683612d95565b9091555092506001811b8303611ae8575f856002018281548110611a8c57611a8c612d68565b905f5260205f20015490505f611aab82835f9182526020526040902090565b600288018054600181810183555f9283526020808420909201849055808b0180549182018155835290822001559050611ae383612d95565b925050505b82845f805b848163ffffffff161015611ba8575f611b07600286612df9565b159050808015611b15575082155b15611b345783611b2e8b6001018463ffffffff16611f6f565b55600192505b611b8d81611b5557611b4f8b6001018463ffffffff16611f6f565b54611b57565b845b82611b6b57855f9182526020526040902090565b611b7e8c6002018563ffffffff16611f6f565b545f9182526020526040902090565b9350600185901c94505080611ba190612e67565b9050611aed565b5081611bb78960010186611f6f565b5550925050505b9250929050565b604080517f39bc69363bb9e26cf14240de4e22569e95cf175cfbcf1ade1a47a253b4bf7f616020820152908101839052606081018290525f90608001611a21565b5f5f60018560010154611c199190612d42565b905080841115611c5f576040517f1b582fcf0000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610689565b82856002015f81548110611c7557611c75612d68565b905f5260205f20018581548110611c8e57611c8e612d68565b5f91825260208220019190915583905b8654811015611dee57611cb2600287612df9565b5f03611d3057611d2982878514611d1457886002018381548110611cd857611cd8612d68565b905f5260205f2001886001611ced9190612d55565b81548110611cfd57611cfd612d68565b905f5260205f2001545f9182526020526040902090565b886003018381548110611cfd57611cfd612d68565b9150611d88565b611d85876002018281548110611d4857611d48612d68565b905f5260205f2001600188611d5d9190612d42565b81548110611d6d57611d6d612d68565b905f5260205f200154835f9182526020526040902090565b91505b611d93600287612e0c565b9550611da0600284612e0c565b92508160028801611db2836001612d55565b81548110611dc257611dc2612d68565b905f5260205f20018781548110611ddb57611ddb612d68565b5f91825260209091200155600101611c9e565b5095945050505050565b6040805160018082528183019092525f916020808301908036833701905050905081815f81518110611e2c57611e2c612d68565b6020908102919091010152600d54611e45816001612d55565b600d819055508043467f94a4617be5e5655b97e5cf28ad2038cdc6ae3325b7940f0da8418aac8516a11f85604051611e7d9190612701565b60405180910390a4505050565b80516020808301516040808501516060860151608087015160a088015193515f97611f5297909695910160f896871b7fff0000000000000000000000000000000000000000000000000000000000000016815294151590951b600185015260f09290921b7fffff00000000000000000000000000000000000000000000000000000000000016600284015260601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660048301526018820152603881019190915260580190565b604051602081830303815290604052805190602001209050919050565b5f828152602081208201805b949350505050565b611fac60405180608001604052805f81526020015f81526020015f81526020015f151581525090565b5f83835f818110611fbf57611fbf612d68565b6020908102929092013592505081901b5f819003612043578160f881901c60011461201c576040517f79274f0400000000000000000000000000000000000000000000000000000000815260f882901c6004820152602401610689565b600180855283901a60208501528260021a60408501528260031a151560608501525061205b565b5f808452602084018590526040840152600160608401525b8260600151801561206f5750604083015115155b156120a6576040517f48c5fa2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505092915050565b60606120ba8383612d42565b67ffffffffffffffff8111156120d2576120d2612886565b6040519080825280602002602001820160405280156120fb578160200160208202803683370190505b509050825b828110156115675785858281811061211a5761211a612d68565b9050602002013582858361212e9190612d42565b8151811061213e5761213e612d68565b6020908102919091010152600101612100565b82515f9061215f8482612440565b825f5b82811015611dee57612175600287612df9565b156121ab576121a687828151811061218f5761218f612d68565b6020026020010151835f9182526020526040902090565b6121d7565b6121d7828883815181106121c1576121c1612d68565b60200260200101515f9182526020526040902090565b91506121e4600287612e0c565b9550600101612162565b5f5f8211612228576040517fa695b1ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f838152600c60209081526040808320858452909152902054801561224e579050610532565b5f611f7b565b5f6040517f8d14ca8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600382018054600181810183555f92835260208084209092018490556040805180840190915284815260028601805480840182559085529284206122cc9301916124b7565b509092915050565b6001820180545f91829190826122e983612d95565b9091555084549091506001901b81036123985783545f9060010180865590505f60038601612318600184612d42565b8154811061232857612328612d68565b905f5260205f20015490505f61234782835f9182526020526040902090565b600388018054600181810183555f92835260208084209092018490556040805180840190915284815260028c0180548084018255908552929093209394506123939390910191906124b7565b505050505b8015612435575f6123aa600183612d42565b9050815f5b865481101561243157828214612431578660020181815481106123d4576123d4612d68565b905f5260205f20018760030182815481106123f1576123f1612d68565b5f918252602080832090910154835460018101855593835291209091015561241a600283612e0c565b9150612427600284612e0c565b92506001016123af565b5050505b611f7b848285611c06565b610100811061247b576040517f1c50038500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001811b82106107cc576040517f9bb54c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828054828255905f5260205f209081019282156124f0579160200282015b828111156124f05782518255916020019190600101906124d5565b506124fc929150612500565b5090565b5b808211156124fc575f8155600101612501565b5f5f60408385031215612525575f5ffd5b50508035926020909101359150565b5f5f83601f840112612544575f5ffd5b50813567ffffffffffffffff81111561255b575f5ffd5b6020830191508360208260051b8501011115611bbe575f5ffd5b5f5f5f5f5f5f60a0878903121561258a575f5ffd5b863595506020870135945060408701359350606087013567ffffffffffffffff8111156125b5575f5ffd5b87016060818a0312156125c6575f5ffd5b9250608087013567ffffffffffffffff8111156125e1575f5ffd5b6125ed89828a01612534565b979a9699509497509295939492505050565b5f6020828403121561260f575f5ffd5b5035919050565b5f5f5f5f5f5f60a0878903121561262b575f5ffd5b86359550602087013594506040870135935060608701359250608087013567ffffffffffffffff8111156125e1575f5ffd5b5f5f5f5f5f5f5f60c0888a031215612673575f5ffd5b87359650602088013595506040880135945060608801359350608088013567ffffffffffffffff8111156126a5575f5ffd5b6126b18a828b01612534565b989b979a5095989497959660a090950135949350505050565b5f602082840312156126da575f5ffd5b813567ffffffffffffffff8111156126f0575f5ffd5b820160e081850312156109c5575f5ffd5b602080825282518282018190525f918401906040840190835b8181101561273857835183526020938401939092019160010161271a565b509095945050505050565b803561ffff81168114612754575f5ffd5b919050565b5f5f5f5f5f5f5f5f60e0898b031215612770575f5ffd5b8835975060208901359650604089013595506060890135945061279560808a01612743565b935060a089013567ffffffffffffffff8111156127b0575f5ffd5b6127bc8b828c01612534565b90945092505060c0890135600281106127d3575f5ffd5b809150509295985092959890939650565b5f5f5f5f5f5f8688036101408112156127fb575f5ffd5b87359650602088013595506040880135945060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08201121561283c575f5ffd5b5060608701925061012087013567ffffffffffffffff8111156125e1575f5ffd5b5f5f5f6060848603121561286f575f5ffd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156128d6576128d6612886565b60405290565b60405160c0810167ffffffffffffffff811182821017156128d6576128d6612886565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561294657612946612886565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611117575f5ffd5b5f6060823603121561297f575f5ffd5b6129876128b3565b61299083612743565b815260208301356129a08161294e565b6020820152604083013567ffffffffffffffff8111156129be575f5ffd5b830136601f8201126129ce575f5ffd5b803567ffffffffffffffff8111156129e8576129e8612886565b612a1960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128ff565b818152366020838501011115612a2d575f5ffd5b816020840160208301375f9181016020019190915260408301525092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff818116838216019081111561053257610532612a4e565b5f60208284031215612ab7575f5ffd5b6109c582612743565b5f60208284031215612ad0575f5ffd5b81356109c58161294e565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b0e575f5ffd5b83018035915067ffffffffffffffff821115612b28575f5ffd5b602001915036819003821315611bbe575f5ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b6f575f5ffd5b83018035915067ffffffffffffffff821115612b89575f5ffd5b6020019150600581901b3603821315611bbe575f5ffd5b8183525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612bd0575f5ffd5b8260051b80836020870137939093016020019392505050565b86815285602082015284604082015260a0606082015261ffff84511660a082015273ffffffffffffffffffffffffffffffffffffffff60208501511660c08201525f6040850151606060e0840152805180610100850152806020830161012086015e5f61012082860101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116840191505061012083820301608084015261105961012082018587612ba0565b8015158114611117575f5ffd5b5f60208284031215612cb7575f5ffd5b81516109c581612c9a565b5f60c0828403128015612cd3575f5ffd5b50612cdc6128dc565b823560ff81168114612cec575f5ffd5b81526020830135612cfc81612c9a565b6020820152612d0d60408401612743565b60408201526060830135612d208161294e565b60608201526080838101359082015260a0928301359281019290925250919050565b8181038181111561053257610532612a4e565b8082018082111561053257610532612a4e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612dc557612dc5612a4e565b5060010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612e0757612e07612dcc565b500690565b5f82612e1a57612e1a612dcc565b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60208284031215612e5c575f5ffd5b81516109c58161294e565b5f63ffffffff821663ffffffff8103612e8257612e82612a4e565b6001019291505056fea264697066735822122051ddffb3cefcd413ceda557b37e66d4854dcce19250dd2797de0af876434bc8464736f6c634300081c0033" + "0x608060405234801561000f575f5ffd5b50600436106101bb575f3560e01c80635d4edca7116100f3578063ba5a8f0011610093578063e896760d1161006e578063e896760d1461044c578063ed1d7d971461045f578063f688e0031461047e578063fb644fc51461049d575f5ffd5b8063ba5a8f001461041d578063da24b3ee14610430578063e02e1bfd14610443575f5ffd5b806379cf6165116100ce57806379cf6165146103b45780639e59a37e146103c7578063b1fde1a8146103e7578063b8776d4d1461040a575f5ffd5b80635d4edca71461036157806366e8a86b1461038e578063685143b9146103a1575f5ffd5b80632f67101d1161015e57806336747fe51161013957806336747fe5146103125780633977d71c1461032757806347b78c1d1461032f57806348ceb85e14610342575f5ffd5b80632f67101d146102825780632f90b184146102f7578063353d7128146102ff575f5ffd5b80631e4fba05116101995780631e4fba05146102285780632b12011d1461023b5780632c3addb8146102445780632e9b5cbb14610263575f5ffd5b80630d81513b146101bf5780631496c5ce146101db57806318b7fc2214610205575b5f5ffd5b6101c8600d5481565b6040519081526020015b60405180910390f35b6101c86101e9366004612514565b600c60209081525f928352604080842090915290825290205481565b610218610213366004612575565b6104b0565b60405190151581526020016101d2565b6101c86102363660046125ff565b6104dc565b6101c860335481565b6101c86102523660046125ff565b60086020525f908152604090205481565b6101c86102713660046125ff565b60096020525f908152604090205481565b610295610290366004612616565b610538565b6040516101d291905f61010082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e0830151151560e083015292915050565b6032546101c8565b61021861030d36600461265d565b610588565b610325610320366004612514565b6105a6565b005b6101c86106f9565b61032561033d366004612514565b610737565b6101c86103503660046125ff565b60026020525f908152604090205481565b6103696107d0565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b61032561039c366004612514565b6107df565b6102186103af3660046126ca565b6108ad565b6102186103c2366004612616565b6109cc565b6103da6103d53660046125ff565b6109db565b6040516101d29190612701565b6004546005546103f5919082565b604080519283526020830191909152016101d2565b6102186104183660046125ff565b610a35565b61032561042b366004612514565b610a53565b61021861043e366004612759565b610ace565b6101c860015481565b61021861045a3660046127e4565b610af9565b6101c861046d3660046125ff565b60036020525f908152604090205481565b6101c861048c3660046125ff565b600b6020525f908152604090205481565b6103256104ab36600461285d565b610b0f565b5f6104cf8787876104c86104c38961296f565b610bfd565b8787610cb3565b90505b9695505050505050565b5f6104e682610a35565b61051c576040517f913183d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260086020526040902061053290610cda565b92915050565b61057a6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f151581525090565b6104cf878787878787610cfe565b5f61059888888888888888610fcd565b90505b979650505050505050565b6105ae6107d0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561061c57506105ec611066565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610692573361062a6107d0565b610632611066565b6040517f2d39667400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152918316602483015290911660448201526064015b60405180910390fd5b5f828152600b6020526040902054829082908110156106e6576040517fbe26346300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610689565b50505f918252600b602052604090912055565b5f6001545f0361072857507f46700b4d40ac5c35af2c22dda2787a91eb567b06c924a8fb8ae9a05b20c08c2190565b6107326004611075565b905090565b61073f6110b7565b61074c618000600f612a7b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107b2576040517fcbd9d2e0000000000000000000000000000000000000000000000000000000008152336004820152602401610689565b6107ba61111a565b6107c48282610a53565b6107cc611220565b5050565b5f610732620100006002612a7b565b6107e76107d0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156108555750610825611066565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610863573361062a6107d0565b61086c82610a35565b156108a3576040517f65e8a01900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107cc8282611252565b5f5f60405180606001604052808460800160208101906108cd9190612aa7565b61ffff1681526020016108e66080860160608701612ac0565b73ffffffffffffffffffffffffffffffffffffffff16815260200161090e60a0860186612adb565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509152509050306318b7fc228435602086013560408701358561096560c08a018a612b3c565b6040518763ffffffff1660e01b815260040161098696959493929190612be9565b602060405180830381865afa1580156109a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c59190612ca7565b9392505050565b5f6104cf878787878787611347565b60606109e682610a35565b610a1c576040517f913183d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f828152600260205260409020546109c5600482611357565b5f468214806105325750505f90815260026020526040902054151590565b610a60618000600f612a7b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac6576040517fcbd9d2e0000000000000000000000000000000000000000000000000000000008152336004820152602401610689565b603355603255565b5f5f610adb868a85611570565b9050610aeb8a8989848989610cb3565b9a9950505050505050505050565b5f6104cf8787876104c836899003890189612cc2565b610b1a838383611614565b5f610b3b610b2883856119e4565b5f86815260086020526040902090611a3f565b60405184815290925084915085907f4f7fd9ed016150a623d5a2cf43053fe313a56293a77e060a05db49ed225795209060200160405180910390a35f610b818286611bc5565b5f8681526002602052604081205491925090610ba09060049084611c06565b604080518581526020810185905291925087917f55f052ace108bbb0a540b328ff35be177a5c1d1f6e1e1adb46c1fa4bdaa69c10910160405180910390a2610be781611df8565b435f908152600960205260409020555050505050565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101919091526040805160c0810182525f815260016020820152835161ffff169181019190915260608101610c606180006008612a7b565b73ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff165f1b81526020018360400151805190602001208152509050919050565b5f5f610cbe85611e8a565b9050610cce888888848888611347565b98975050505050505050565b600180820180545f92610cf79291610cf29190612d42565b611f6f565b5492915050565b610d406040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f151581525090565b5f829003610d7a576040517f8e23ac1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f8d5411ba4a61cbb507591adfdbe3b8bb500d912bee0b3b4ff0750f652525bc468401610dd3576040517fd356e6ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610dde8484611f83565b805160c0840181905260208201519192505f91610e1391610e0c9188918891610e079082612d55565b6120ae565b8888612151565b905081602001518360c001818151610e2b9190612d55565b90525060808301819052606082018051151560e08501525115610e4f5750506104d2565b5f610e5a828a6119e4565b90505f86868660c00151818110610e7357610e73612d68565b905060200201355f1c90508460c0018051610e8d90612d95565b905260c085015160408501515f91610eb991610eb2918b918b9190610e079082612d55565b8385612151565b905084604001518660c001818151610ed19190612d55565b905250610ede818d611bc5565b8660a0018181525050505050505f5f5f5f87878760c00151818110610f0557610f05612d68565b905060200201355f1c90508560c0018051610f1f90612d95565b905260c0860151608082901c93506fffffffffffffffffffffffffffffffff8216925088908890818110610f5557610f55612d68565b905060200201355f1c93508560c0018051610f6f90612d95565b90525060408051610100810182529384526020840192909252828201528201516060808301919091526080848101519083015260a0808501519083015260c09384015193820193909352910151151560e08201529695505050505050565b5f5f610fdd898989898989610cfe565b90508060e0015115611011575f610ff48a8a6121ee565b905081608001518114801561100857508015155b9250505061059b565b8260010361104b576040517f68d91b4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611059898983888888612254565b9998505050505050505050565b5f61073262010000600a612a7b565b5f81600201825f01548154811061108e5761108e612d68565b905f5260205f20015f815481106110a7576110a7612d68565b905f5260205f2001549050919050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4805460019091558015611117576040517fdf3a8fdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f54610100900460ff16156111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960448201527f616c697a696e67000000000000000000000000000000000000000000000000006064820152608401610689565b5f5460ff9081161461121e575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61124b60047f46700b4d40ac5c35af2c22dda2787a91eb567b06c924a8fb8ae9a05b20c08c21612287565b5061121e465f5b60018054905f61126183612d95565b909155505f83815260026020818152604080842085905584845260038252808420879055868452600b82528084208690556008825283208381559182018054600180820183559185528285207f46700b4d40ac5c35af2c22dda2787a91eb567b06c924a8fb8ae9a05b20c08c219101559182018054928301815583528220018190555f6112f96112f18387611bc5565b6004906122d4565b905082857f5d96eda109bfd71cf9f4f70c83de31c4150760e8828979a95d9e5f9f15455af760405160405180910390a361133281611df8565b435f9081526009602052604090205550505050565b5f6104cf8787878787875f610fcd565b606082600101545f03611396576040517fc33e612800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600184600101546113a89190612d42565b9050808311156113ee576040517f1b582fcf0000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610689565b83545f9067ffffffffffffffff81111561140a5761140a612886565b604051908082528060200260200182016040528015611433578160200160208202803683370190505b5090505f5b85548110156115675761144c600286612df9565b5f036114e3578483146114a15785600201818154811061146e5761146e612d68565b905f5260205f20018560016114839190612d55565b8154811061149357611493612d68565b905f5260205f2001546114c0565b8560030181815481106114b6576114b6612d68565b905f5260205f2001545b8282815181106114d2576114d2612d68565b602002602001018181525050611545565b8560020181815481106114f8576114f8612d68565b905f5260205f200160018661150d9190612d42565b8154811061151d5761151d612d68565b905f5260205f20015482828151811061153857611538612d68565b6020026020010181815250505b611550600286612e0c565b945061155d600284612e0c565b9250600101611438565b50949350505050565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101919091526040518060c001604052805f60ff1681526020016001151581526020018561ffff16815260200161800060016115d79190612a7b565b73ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183600181111561160a5761160a612e1f565b9052949350505050565b8261161e60325490565b46146116ca57611632620100006010612a7b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116c55733611673620100006010612a7b565b6040517f3db511f400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610689565b611851565b6116d26107d0565b73ffffffffffffffffffffffffffffffffffffffff1663e680c4c1826040518263ffffffff1660e01b815260040161170c91815260200190565b602060405180830381865afa158015611727573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174b9190612e4c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461185157336117866107d0565b73ffffffffffffffffffffffffffffffffffffffff1663e680c4c1836040518263ffffffff1660e01b81526004016117c091815260200190565b602060405180830381865afa1580156117db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ff9190612e4c565b6040517f73fe6c1b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610689565b61185a84610a35565b611890576040517f913183d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816118c7576040517f655c373c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f848152600c602090815260408083208684529091529020548490849015611924576040517fbe26346300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610689565b50505f848152600b602052604081205461193f906001612d55565b90508484808314611985576040517f366c42f800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610689565b50505f858152600c60209081526040808320878452909152808220859055518491869188917f4e7f63ba2aa632b5a8e84262f2c749110bbb3ea0317bf2260e7fca7bb9de809691a45f948552600b602052604090942093909355505050565b604080517fd82fec4a37cbdc47f1e5cc4ad64deacf34a48e6f7c61fa5b68fd58e543259cf46020820152908101839052606081018290525f906080015b60405160208183030381529060405280519060200120905092915050565b5f5f5f60018560020180549050611a569190612d42565b8554909150855f611a6683612d95565b9091555092506001811b8303611ae8575f856002018281548110611a8c57611a8c612d68565b905f5260205f20015490505f611aab82835f9182526020526040902090565b600288018054600181810183555f9283526020808420909201849055808b0180549182018155835290822001559050611ae383612d95565b925050505b82845f805b848163ffffffff161015611ba8575f611b07600286612df9565b159050808015611b15575082155b15611b345783611b2e8b6001018463ffffffff16611f6f565b55600192505b611b8d81611b5557611b4f8b6001018463ffffffff16611f6f565b54611b57565b845b82611b6b57855f9182526020526040902090565b611b7e8c6002018563ffffffff16611f6f565b545f9182526020526040902090565b9350600185901c94505080611ba190612e67565b9050611aed565b5081611bb78960010186611f6f565b5550925050505b9250929050565b604080517f39bc69363bb9e26cf14240de4e22569e95cf175cfbcf1ade1a47a253b4bf7f616020820152908101839052606081018290525f90608001611a21565b5f5f60018560010154611c199190612d42565b905080841115611c5f576040517f1b582fcf0000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610689565b82856002015f81548110611c7557611c75612d68565b905f5260205f20018581548110611c8e57611c8e612d68565b5f91825260208220019190915583905b8654811015611dee57611cb2600287612df9565b5f03611d3057611d2982878514611d1457886002018381548110611cd857611cd8612d68565b905f5260205f2001886001611ced9190612d55565b81548110611cfd57611cfd612d68565b905f5260205f2001545f9182526020526040902090565b886003018381548110611cfd57611cfd612d68565b9150611d88565b611d85876002018281548110611d4857611d48612d68565b905f5260205f2001600188611d5d9190612d42565b81548110611d6d57611d6d612d68565b905f5260205f200154835f9182526020526040902090565b91505b611d93600287612e0c565b9550611da0600284612e0c565b92508160028801611db2836001612d55565b81548110611dc257611dc2612d68565b905f5260205f20018781548110611ddb57611ddb612d68565b5f91825260209091200155600101611c9e565b5095945050505050565b6040805160018082528183019092525f916020808301908036833701905050905081815f81518110611e2c57611e2c612d68565b6020908102919091010152600d54611e45816001612d55565b600d819055508043467f94a4617be5e5655b97e5cf28ad2038cdc6ae3325b7940f0da8418aac8516a11f85604051611e7d9190612701565b60405180910390a4505050565b80516020808301516040808501516060860151608087015160a088015193515f97611f5297909695910160f896871b7fff0000000000000000000000000000000000000000000000000000000000000016815294151590951b600185015260f09290921b7fffff00000000000000000000000000000000000000000000000000000000000016600284015260601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660048301526018820152603881019190915260580190565b604051602081830303815290604052805190602001209050919050565b5f828152602081208201805b949350505050565b611fac60405180608001604052805f81526020015f81526020015f81526020015f151581525090565b5f83835f818110611fbf57611fbf612d68565b6020908102929092013592505081901b5f819003612043578160f881901c60011461201c576040517f79274f0400000000000000000000000000000000000000000000000000000000815260f882901c6004820152602401610689565b600180855283901a60208501528260021a60408501528260031a151560608501525061205b565b5f808452602084018590526040840152600160608401525b8260600151801561206f5750604083015115155b156120a6576040517f48c5fa2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505092915050565b60606120ba8383612d42565b67ffffffffffffffff8111156120d2576120d2612886565b6040519080825280602002602001820160405280156120fb578160200160208202803683370190505b509050825b828110156115675785858281811061211a5761211a612d68565b9050602002013582858361212e9190612d42565b8151811061213e5761213e612d68565b6020908102919091010152600101612100565b82515f9061215f8482612440565b825f5b82811015611dee57612175600287612df9565b156121ab576121a687828151811061218f5761218f612d68565b6020026020010151835f9182526020526040902090565b6121d7565b6121d7828883815181106121c1576121c1612d68565b60200260200101515f9182526020526040902090565b91506121e4600287612e0c565b9550600101612162565b5f5f8211612228576040517fa695b1ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f838152600c60209081526040808320858452909152902054801561224e579050610532565b5f611f7b565b5f6040517f8d14ca8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600382018054600181810183555f92835260208084209092018490556040805180840190915284815260028601805480840182559085529284206122cc9301916124b7565b509092915050565b6001820180545f91829190826122e983612d95565b9091555084549091506001901b81036123985783545f9060010180865590505f60038601612318600184612d42565b8154811061232857612328612d68565b905f5260205f20015490505f61234782835f9182526020526040902090565b600388018054600181810183555f92835260208084209092018490556040805180840190915284815260028c0180548084018255908552929093209394506123939390910191906124b7565b505050505b8015612435575f6123aa600183612d42565b9050815f5b865481101561243157828214612431578660020181815481106123d4576123d4612d68565b905f5260205f20018760030182815481106123f1576123f1612d68565b5f918252602080832090910154835460018101855593835291209091015561241a600283612e0c565b9150612427600284612e0c565b92506001016123af565b5050505b611f7b848285611c06565b610100811061247b576040517f1c50038500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001811b82106107cc576040517f9bb54c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828054828255905f5260205f209081019282156124f0579160200282015b828111156124f05782518255916020019190600101906124d5565b506124fc929150612500565b5090565b5b808211156124fc575f8155600101612501565b5f5f60408385031215612525575f5ffd5b50508035926020909101359150565b5f5f83601f840112612544575f5ffd5b50813567ffffffffffffffff81111561255b575f5ffd5b6020830191508360208260051b8501011115611bbe575f5ffd5b5f5f5f5f5f5f60a0878903121561258a575f5ffd5b863595506020870135945060408701359350606087013567ffffffffffffffff8111156125b5575f5ffd5b87016060818a0312156125c6575f5ffd5b9250608087013567ffffffffffffffff8111156125e1575f5ffd5b6125ed89828a01612534565b979a9699509497509295939492505050565b5f6020828403121561260f575f5ffd5b5035919050565b5f5f5f5f5f5f60a0878903121561262b575f5ffd5b86359550602087013594506040870135935060608701359250608087013567ffffffffffffffff8111156125e1575f5ffd5b5f5f5f5f5f5f5f60c0888a031215612673575f5ffd5b87359650602088013595506040880135945060608801359350608088013567ffffffffffffffff8111156126a5575f5ffd5b6126b18a828b01612534565b989b979a5095989497959660a090950135949350505050565b5f602082840312156126da575f5ffd5b813567ffffffffffffffff8111156126f0575f5ffd5b820160e081850312156109c5575f5ffd5b602080825282518282018190525f918401906040840190835b8181101561273857835183526020938401939092019160010161271a565b509095945050505050565b803561ffff81168114612754575f5ffd5b919050565b5f5f5f5f5f5f5f5f60e0898b031215612770575f5ffd5b8835975060208901359650604089013595506060890135945061279560808a01612743565b935060a089013567ffffffffffffffff8111156127b0575f5ffd5b6127bc8b828c01612534565b90945092505060c0890135600281106127d3575f5ffd5b809150509295985092959890939650565b5f5f5f5f5f5f8688036101408112156127fb575f5ffd5b87359650602088013595506040880135945060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08201121561283c575f5ffd5b5060608701925061012087013567ffffffffffffffff8111156125e1575f5ffd5b5f5f5f6060848603121561286f575f5ffd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156128d6576128d6612886565b60405290565b60405160c0810167ffffffffffffffff811182821017156128d6576128d6612886565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561294657612946612886565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611117575f5ffd5b5f6060823603121561297f575f5ffd5b6129876128b3565b61299083612743565b815260208301356129a08161294e565b6020820152604083013567ffffffffffffffff8111156129be575f5ffd5b830136601f8201126129ce575f5ffd5b803567ffffffffffffffff8111156129e8576129e8612886565b612a1960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128ff565b818152366020838501011115612a2d575f5ffd5b816020840160208301375f9181016020019190915260408301525092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff818116838216019081111561053257610532612a4e565b5f60208284031215612ab7575f5ffd5b6109c582612743565b5f60208284031215612ad0575f5ffd5b81356109c58161294e565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b0e575f5ffd5b83018035915067ffffffffffffffff821115612b28575f5ffd5b602001915036819003821315611bbe575f5ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b6f575f5ffd5b83018035915067ffffffffffffffff821115612b89575f5ffd5b6020019150600581901b3603821315611bbe575f5ffd5b8183525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612bd0575f5ffd5b8260051b80836020870137939093016020019392505050565b86815285602082015284604082015260a0606082015261ffff84511660a082015273ffffffffffffffffffffffffffffffffffffffff60208501511660c08201525f6040850151606060e0840152805180610100850152806020830161012086015e5f61012082860101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116840191505061012083820301608084015261105961012082018587612ba0565b8015158114611117575f5ffd5b5f60208284031215612cb7575f5ffd5b81516109c581612c9a565b5f60c0828403128015612cd3575f5ffd5b50612cdc6128dc565b823560ff81168114612cec575f5ffd5b81526020830135612cfc81612c9a565b6020820152612d0d60408401612743565b60408201526060830135612d208161294e565b60608201526080838101359082015260a0928301359281019290925250919050565b8181038181111561053257610532612a4e565b8082018082111561053257610532612a4e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612dc557612dc5612a4e565b5060010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612e0757612e07612dcc565b500690565b5f82612e1a57612e1a612dcc565b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60208284031215612e5c575f5ffd5b81516109c58161294e565b5f63ffffffff821663ffffffff8103612e8257612e82612a4e565b6001019291505056fea264697066735822122093fa9d4b5712a12804cde004fcd6225fc5623038ad725bc7de89b327dde51ce864736f6c634300081c0033" ], [ "0x0000000000000000000000000000000000010002", - "0x608060405234801561000f575f5ffd5b5060043610610346575f3560e01c806381eccdd4116101be578063cbe83612116100fe578063e6d9923b1161009e578063f2fde38b11610079578063f2fde38b14610800578063f851a44014610813578063ff41810414610833578063ff5a62a114610846575f5ffd5b8063e6d9923b146107b8578063e9420f8c146107cb578063f2767129146107ed575f5ffd5b8063e0ab6368116100d9578063e0ab636814610746578063e30c397814610768578063e52db4ca14610786578063e680c4c1146107a5575f5ffd5b8063cbe83612146106f3578063d4b9f4fa14610713578063dead6f7f14610733575f5ffd5b80639d5bd3da11610169578063b93c936611610144578063b93c93661461068b578063ba5a8f00146106ad578063bc0aac10146106c0578063c4aebf2f146106e0575f5ffd5b80639d5bd3da14610630578063a17223b014610665578063b292f5f114610678575f5ffd5b80638da5cb5b116101995780638da5cb5b146105f55780638f8d37a81461061357806399c16d1a1461061d575f5ffd5b806381eccdd4146105d65780638456cb59146105e05780638916251f146105e8575f5ffd5b8063524c0cfa1161028957806368b8d3311161023457806370fccb521161020f57806370fccb5214610594578063715018a6146105b357806371623274146105bb57806379ba5097146105ce575f5ffd5b806368b8d331146105475780637011be851461055c57806370d8af871461056f575f5ffd5b80635dd68acd116102645780635dd68acd146104f5578063669e1e4614610508578063671a713114610528575f5ffd5b8063524c0cfa146104b857806359ec65a2146104cb5780635c975abb146104de575f5ffd5b80632dbcf55f116102f457806338720778116102cf578063387207781461046a5780633f4ba83a1461048857806349707f31146104905780634dd18bf5146104a5575f5ffd5b80632dbcf55f1461043a5780632f90b1841461044d578063332b96dc14610457575f5ffd5b80631c50cfea116103245780631c50cfea146103f3578063224092131461040657806324358c6114610419575f5ffd5b80630641e4f71461034a57806307621f841461038f5780630e18b681146103e9575b5f5ffd5b61035d61035836600461297b565b610859565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152015b60405180910390f35b6103c461039d36600461299b565b60d66020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610386565b6103f16109fb565b005b6103f161040136600461299b565b610b29565b61035d6104143660046129c5565b610c4a565b61042c61042736600461299b565b610d2d565b604051908152602001610386565b6103f1610448366004612a1b565b610db5565b61042c6101025481565b6103f1610465366004612a49565b610fb0565b60c95473ffffffffffffffffffffffffffffffffffffffff166103c4565b6103f16110d6565b6104986110e8565b6040516103869190612a64565b6103f16104b3366004612a49565b6111bc565b6103f16104c6366004612abc565b6112f8565b6103c46104d936600461299b565b61143d565b60975460ff165b6040519015158152602001610386565b6103f1610503366004612afe565b6115c7565b60dc546103c49073ffffffffffffffffffffffffffffffffffffffff1681565b61042c61053636600461299b565b60d86020525f908152604090205481565b61054f61170a565b6040516103869190612b6b565b6103f161056a366004612baf565b61171b565b60db546103c490610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61042c6105a2366004612a49565b60d76020525f908152604090205481565b6103f16117a7565b61042c6105c9366004612be3565b6117b8565b6103f161186d565b61042c6101015481565b6103f1611922565b60db546104e59060ff1681565b60335473ffffffffffffffffffffffffffffffffffffffff166103c4565b61042c6101035481565b6104e561062b366004612c69565b611932565b6103c461063e36600461299b565b60cc6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6103f1610673366004612a49565b6119dc565b6104e5610686366004612d00565b611abc565b6104e5610699366004612a49565b60ca6020525f908152604090205460ff1681565b6103f16106bb36600461297b565b611b6c565b60c9546103c49073ffffffffffffffffffffffffffffffffffffffff1681565b6103f16106ee36600461297b565b611bfe565b60d5546103c49073ffffffffffffffffffffffffffffffffffffffff1681565b60d3546103c49073ffffffffffffffffffffffffffffffffffffffff1681565b6103c461074136600461299b565b611c84565b6104e561075436600461299b565b60da6020525f908152604090205460ff1681565b60655473ffffffffffffffffffffffffffffffffffffffff166103c4565b61042c61079436600461299b565b60d46020525f908152604090205481565b6103c46107b336600461299b565b611c94565b6104e56107c6366004612d85565b611ca7565b6104e56107d936600461299b565b60d96020525f908152604090205460ff1681565b61035d6107fb366004612dfe565b611d07565b6103f161080e366004612a49565b611f57565b60ce546103c49073ffffffffffffffffffffffffffffffffffffffff1681565b6103f1610841366004612e31565b612007565b6103f1610854366004612a49565b6120a5565b60db545f908190610100900473ffffffffffffffffffffffffffffffffffffffff1633146108de5760db546040517f8beee3a300000000000000000000000000000000000000000000000000000000815233600482015261010090910473ffffffffffffffffffffffffffffffffffffffff1660248201526044015b60405180910390fd5b5f83815260d9602052604090205460ff16610925576040517f90c7cbf100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f84815260d86020526040902054461461096b576040517f5e67e79300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f84815260d86020908152604080832086905560d990915290205460ff16156109c0576040517f02181a1300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109cb60d0856121cf565b5f94855260cc602052604090942054939473ffffffffffffffffffffffffffffffffffffffff9094169392505050565b60cf5473ffffffffffffffffffffffffffffffffffffffff16338114610a4f576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b60ce805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000808416821790945560cf80549094169093556040519116915f917fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9908390a38173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc60405160405180910390a35050565b60ce5473ffffffffffffffffffffffffffffffffffffffff163314801590610b69575060335473ffffffffffffffffffffffffffffffffffffffff163314155b15610ba2576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b5f81815260da602052604090205460ff1615610bea576040517ffe919e2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81815260da602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f3df150949161462acf3be30521d7da9e533b247327a254e55dd01875897a6df391a250565b60db545f908190610100900473ffffffffffffffffffffffffffffffffffffffff163314610cca5760db546040517f8beee3a300000000000000000000000000000000000000000000000000000000815233600482015261010090910473ffffffffffffffffffffffffffffffffffffffff1660248201526044016108d5565b610cd384611c94565b5f85815260cc602052604081205491935073ffffffffffffffffffffffffffffffffffffffff9091169150836001811115610d1057610d10612e66565b03610d26575f84815260d8602052604090204690555b9250929050565b5f81815260cc602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610d8b576040517f23f3c357000000000000000000000000000000000000000000000000000000008152600481018490526024016108d5565b73ffffffffffffffffffffffffffffffffffffffff165f90815260d7602052604090205492915050565b5f46610dc16101025490565b14610dee577fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef3301610df0565b335b60d55490915073ffffffffffffffffffffffffffffffffffffffff808316911614610e5f576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016108d5565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260ca602052604090205460ff16610ebd576040517fc630ef3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610f15610ecb6101025490565b6040805160208082019390935273ffffffffffffffffffffffffffffffffffffffff8616818301526060808201899052825180830390910181526080909101909152805191012090565b5f81815260d66020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff891690811790915580845260d783529281902084905551338152929350869284917f8f09d7694a9ae17acec5cf132d594d7eee23572f7fe132396ce72b1afbf7ef20910160405180910390a450505050565b610fb86121da565b73ffffffffffffffffffffffffffffffffffffffff8116611005576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f90815260ca602052604090205460ff16611063576040517fc630ef3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f81815260ca602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f4e04a497739580efe78a7ee09cdabe6f6fe90965c683292a519102ce5193b68a9190a250565b6110de6121da565b6110e661225b565b565b60605f6110f560d06122d9565b9050805167ffffffffffffffff81111561111157611111612e93565b60405190808252806020026020018201604052801561113a578160200160208202803683370190505b5081519092505f5b818110156111b65761117783828151811061115f5761115f612ec0565b602002602001015160d06121cf90919063ffffffff16565b84828151811061118957611189612ec0565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101611142565b50505090565b60ce5473ffffffffffffffffffffffffffffffffffffffff1633148015906111fc575060335473ffffffffffffffffffffffffffffffffffffffff163314155b15611235576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b73ffffffffffffffffffffffffffffffffffffffff8116611282576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60cf805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9905f90a35050565b3373111111111111111111111111111111111111111114611361576040517fa2ac02a000000000000000000000000000000000000000000000000000000000815233600482015273111111111111111111111111111111111111111160248201526044016108d5565b46610102540361139d576040517f472477e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6113a960d0856121cf565b6040517fddcc9eec0000000000000000000000000000000000000000000000000000000081526004810185905267ffffffffffffffff8416602482015290915073ffffffffffffffffffffffffffffffffffffffff82169063ddcc9eec906044015f604051808303815f87803b158015611421575f5ffd5b505af1158015611433573d5f5f3e3d5ffd5b5050505050505050565b5f81815260d460205260408082205460c95491517f53b9e632000000000000000000000000000000000000000000000000000000008152600481018290529091839173ffffffffffffffffffffffffffffffffffffffff909116906353b9e63290602401602060405180830381865afa1580156114bc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114e09190612eed565b905073ffffffffffffffffffffffffffffffffffffffff8116611532576040517f64107968000000000000000000000000000000000000000000000000000000008152600481018390526024016108d5565b6040517f97bb3ce90000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8216906397bb3ce990602401602060405180830381865afa15801561159b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115bf9190612eed565b949350505050565b60335473ffffffffffffffffffffffffffffffffffffffff16331480159061162757506115f7618000600f612f08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611660576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b60c9805473ffffffffffffffffffffffffffffffffffffffff9687167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560d580549587169582169590951790945560d380549386169385169390931790925560db8054918516610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff90921691909117905560dc8054919093169116179055565b606061171660d06122d9565b905090565b60db54610100900473ffffffffffffffffffffffffffffffffffffffff1633146117975760db546040517f8beee3a300000000000000000000000000000000000000000000000000000000815233600482015261010090910473ffffffffffffffffffffffffffffffffffffffff1660248201526044016108d5565b6117a28383836122e5565b505050565b6117af6121da565b6110e65f612341565b5f806117c560d0876121cf565b6040517fb473318e00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044810185905290915073ffffffffffffffffffffffffffffffffffffffff82169063b473318e90606401602060405180830381865afa15801561183f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118639190612f59565b9695505050505050565b606554339073ffffffffffffffffffffffffffffffffffffffff168114611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084016108d5565b61191f81612341565b50565b61192a6121da565b6110e6612372565b60d3546040517f18b7fc220000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff16906318b7fc2290611992908a908a908a908a908a908a90600401613000565b602060405180830381865afa1580156119ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119d191906130dd565b979650505050505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314801590611a3c5750611a0c618000600f612f08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611a75576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b60dc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60d3546040517fda24b3ee0000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff169063da24b3ee90611b20908c908c908c908c908c908c908c908c906004016130f8565b602060405180830381865afa158015611b3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5f91906130dd565b9998505050505050505050565b611b79618000600f612f08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bdf576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b610102829055610103819055611bf68260016123cd565b610101555050565b60dc5473ffffffffffffffffffffffffffffffffffffffff163314801590611c3a57503373ffffffffffffffffffffffffffffffffffffffff14155b15611c73576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b5f91825260d4602052604090912055565b5f611c8e82611c94565b92915050565b5f611ca060d08361242d565b9392505050565b60d3546040517fe896760d0000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff169063e896760d90611992908a908a908a908a908a908a90600401613177565b60db545f908190610100900473ffffffffffffffffffffffffffffffffffffffff163314611d875760db546040517f8beee3a300000000000000000000000000000000000000000000000000000000815233600482015261010090910473ffffffffffffffffffffffffffffffffffffffff1660248201526044016108d5565b505f84815260d6602052604090205473ffffffffffffffffffffffffffffffffffffffff1680611de6576040517fce63ce17000000000000000000000000000000000000000000000000000000008152600481018690526024016108d5565b5f84815260d86020526040902054469003611e2f576040517f587df4260000000000000000000000000000000000000000000000000000000081524660048201526024016108d5565b5f84815260d86020908152604080832046905560cc825280832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861617905560d48252808320863590819055835260da909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610102544614611f4457611ede620100006010612f08565b73ffffffffffffffffffffffffffffffffffffffff166327aff300846040518263ffffffff1660e01b8152600401611f169190613228565b5f604051808303815f87803b158015611f2d575f5ffd5b505af1158015611f3f573d5f5f3e3d5ffd5b505050505b611f4d84611c94565b9150935093915050565b611f5f6121da565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155611fc260335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61200f612448565b61201c618000600f612f08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612082576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b61208a6124a8565b6120948382611b6c565b61209d82612341565b6117a26125a8565b6120ad6121da565b73ffffffffffffffffffffffffffffffffffffffff81166120fa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f90815260ca602052604090205460ff1615612159576040517fec27343900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f81815260ca602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f2eae91be1021e05cc8076387b0182458ae474ae44ee44cc59aefda6ca53c1f429190a250565b5f611ca08383612627565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d5565b6122636126b0565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390a1565b60605f611ca08361271c565b6122f160d08484612727565b5080801561230a57506101035461230860d0612749565b115b156117a2576040517f601b688200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606580547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561191f81612753565b61237a6127c9565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122ae3390565b5f826123dd620100006004612f08565b60408051602081019390935273ffffffffffffffffffffffffffffffffffffffff918216908301528316606082015260800160405160208183030381529060405280519060200120905092915050565b5f80808061243b8686612836565b9097909650945050505050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf480546001909155801561191f576040517fdf3a8fdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff161561253f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960448201527f616c697a696e670000000000000000000000000000000000000000000000000060648201526084016108d5565b5f5460ff908116146110e6575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016122cf565b600160da5f6125b76101015490565b81526020019081526020015f205f6101000a81548160ff021916908315150217905550600160d95f6125e96101025490565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b5f8181526002830160205260408120548015158061264a575061264a848461286e565b611ca0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b6579000060448201526064016108d5565b60975460ff166110e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016108d5565b6060611c8e82612879565b5f6115bf848473ffffffffffffffffffffffffffffffffffffffff8516612885565b5f611c8e826128a1565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60975460ff16156110e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016108d5565b5f81815260028301602052604081205481908061286357612857858561286e565b92505f9150610d269050565b600192509050610d26565b5f611ca083836128ab565b60605f611ca0836128c2565b5f82815260028401602052604081208290556115bf848461291b565b5f611c8e82612926565b5f8181526001830160205260408120541515611ca0565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561290f57602002820191905f5260205f20905b8154815260200190600101908083116128fb575b50505050509050919050565b5f611ca0838361292f565b5f611c8e825490565b5f81815260018301602052604081205461297457508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611c8e565b505f611c8e565b5f5f6040838503121561298c575f5ffd5b50508035926020909101359150565b5f602082840312156129ab575f5ffd5b5035919050565b8035600281106129c0575f5ffd5b919050565b5f5f604083850312156129d6575f5ffd5b823591506129e6602084016129b2565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461191f575f5ffd5b80356129c0816129ef565b5f5f60408385031215612a2c575f5ffd5b823591506020830135612a3e816129ef565b809150509250929050565b5f60208284031215612a59575f5ffd5b8135611ca0816129ef565b602080825282518282018190525f918401906040840190835b81811015612ab157835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612a7d565b509095945050505050565b5f5f5f60608486031215612ace575f5ffd5b8335925060208401359150604084013567ffffffffffffffff81168114612af3575f5ffd5b809150509250925092565b5f5f5f5f5f60a08688031215612b12575f5ffd5b8535612b1d816129ef565b94506020860135612b2d816129ef565b93506040860135612b3d816129ef565b92506060860135612b4d816129ef565b91506080860135612b5d816129ef565b809150509295509295909350565b602080825282518282018190525f918401906040840190835b81811015612ab1578351835260209384019390920191600101612b84565b801515811461191f575f5ffd5b5f5f5f60608486031215612bc1575f5ffd5b833592506020840135612bd3816129ef565b91506040840135612af381612ba2565b5f5f5f5f60808587031215612bf6575f5ffd5b5050823594602084013594506040840135936060013592509050565b5f60608284031215612c22575f5ffd5b50919050565b5f5f83601f840112612c38575f5ffd5b50813567ffffffffffffffff811115612c4f575f5ffd5b6020830191508360208260051b8501011115610d26575f5ffd5b5f5f5f5f5f5f60a08789031215612c7e575f5ffd5b863595506020870135945060408701359350606087013567ffffffffffffffff811115612ca9575f5ffd5b612cb589828a01612c12565b935050608087013567ffffffffffffffff811115612cd1575f5ffd5b612cdd89828a01612c28565b979a9699509497509295939492505050565b803561ffff811681146129c0575f5ffd5b5f5f5f5f5f5f5f5f60e0898b031215612d17575f5ffd5b88359750602089013596506040890135955060608901359450612d3c60808a01612cef565b935060a089013567ffffffffffffffff811115612d57575f5ffd5b612d638b828c01612c28565b9094509250612d76905060c08a016129b2565b90509295985092959890939650565b5f5f5f5f5f5f868803610140811215612d9c575f5ffd5b87359650602088013595506040880135945060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa082011215612ddd575f5ffd5b5060608701925061012087013567ffffffffffffffff811115612cd1575f5ffd5b5f5f5f60a08486031215612e10575f5ffd5b8335925060208401359150612e288560408601612c12565b90509250925092565b5f5f5f60608486031215612e43575f5ffd5b833592506020840135612e55816129ef565b929592945050506040919091013590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215612efd575f5ffd5b8151611ca0816129ef565b73ffffffffffffffffffffffffffffffffffffffff8181168382160190811115611c8e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f60208284031215612f69575f5ffd5b5051919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612fe7575f5ffd5b8260051b80836020870137939093016020019392505050565b86815285602082015284604082015260a0606082015261ffff61302285612cef565b1660a08201525f6020850135613037816129ef565b73ffffffffffffffffffffffffffffffffffffffff1660c08301526040850135368690037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112613087575f5ffd5b850160208101903567ffffffffffffffff8111156130a3575f5ffd5b8036038213156130b1575f5ffd5b606060e08501526130c761010085018284612f70565b9150508281036080840152611b5f818587612fb7565b5f602082840312156130ed575f5ffd5b8151611ca081612ba2565b88815287602082015286604082015285606082015261ffff8516608082015260e060a08201525f61312d60e083018587612fb7565b905060028310613164577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8260c08301529998505050505050505050565b8681528560208201528460408201525f843560ff8116808214613198575f5ffd5b60608401525060208501356131ac81612ba2565b1515608083015261ffff6131c260408701612cef565b1660a08301526131d460608601612a10565b73ffffffffffffffffffffffffffffffffffffffff1660c0830152608085013560e083015260a0850135610100830152610140610120830181905261321c9083018486612fb7565b98975050505050505050565b8135815260208083013590820152606081016040830135613248816129ef565b73ffffffffffffffffffffffffffffffffffffffff81166040840152509291505056fea26469706673582212204ff654db3d398d1ea1916d5d8ba96dcabbc16b93fac99bfa5673321c397b8b3564736f6c634300081c0033" + "0x608060405234801561000f575f5ffd5b5060043610610346575f3560e01c806381eccdd4116101be578063cbe83612116100fe578063e6d9923b1161009e578063f2fde38b11610079578063f2fde38b14610800578063f851a44014610813578063ff41810414610833578063ff5a62a114610846575f5ffd5b8063e6d9923b146107b8578063e9420f8c146107cb578063f2767129146107ed575f5ffd5b8063e0ab6368116100d9578063e0ab636814610746578063e30c397814610768578063e52db4ca14610786578063e680c4c1146107a5575f5ffd5b8063cbe83612146106f3578063d4b9f4fa14610713578063dead6f7f14610733575f5ffd5b80639d5bd3da11610169578063b93c936611610144578063b93c93661461068b578063ba5a8f00146106ad578063bc0aac10146106c0578063c4aebf2f146106e0575f5ffd5b80639d5bd3da14610630578063a17223b014610665578063b292f5f114610678575f5ffd5b80638da5cb5b116101995780638da5cb5b146105f55780638f8d37a81461061357806399c16d1a1461061d575f5ffd5b806381eccdd4146105d65780638456cb59146105e05780638916251f146105e8575f5ffd5b8063524c0cfa1161028957806368b8d3311161023457806370fccb521161020f57806370fccb5214610594578063715018a6146105b357806371623274146105bb57806379ba5097146105ce575f5ffd5b806368b8d331146105475780637011be851461055c57806370d8af871461056f575f5ffd5b80635dd68acd116102645780635dd68acd146104f5578063669e1e4614610508578063671a713114610528575f5ffd5b8063524c0cfa146104b857806359ec65a2146104cb5780635c975abb146104de575f5ffd5b80632dbcf55f116102f457806338720778116102cf578063387207781461046a5780633f4ba83a1461048857806349707f31146104905780634dd18bf5146104a5575f5ffd5b80632dbcf55f1461043a5780632f90b1841461044d578063332b96dc14610457575f5ffd5b80631c50cfea116103245780631c50cfea146103f3578063224092131461040657806324358c6114610419575f5ffd5b80630641e4f71461034a57806307621f841461038f5780630e18b681146103e9575b5f5ffd5b61035d61035836600461297b565b610859565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152015b60405180910390f35b6103c461039d36600461299b565b60d66020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610386565b6103f16109fb565b005b6103f161040136600461299b565b610b29565b61035d6104143660046129c5565b610c4a565b61042c61042736600461299b565b610d2d565b604051908152602001610386565b6103f1610448366004612a1b565b610db5565b61042c6101025481565b6103f1610465366004612a49565b610fb0565b60c95473ffffffffffffffffffffffffffffffffffffffff166103c4565b6103f16110d6565b6104986110e8565b6040516103869190612a64565b6103f16104b3366004612a49565b6111bc565b6103f16104c6366004612abc565b6112f8565b6103c46104d936600461299b565b61143d565b60975460ff165b6040519015158152602001610386565b6103f1610503366004612afe565b6115c7565b60dc546103c49073ffffffffffffffffffffffffffffffffffffffff1681565b61042c61053636600461299b565b60d86020525f908152604090205481565b61054f61170a565b6040516103869190612b6b565b6103f161056a366004612baf565b61171b565b60db546103c490610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61042c6105a2366004612a49565b60d76020525f908152604090205481565b6103f16117a7565b61042c6105c9366004612be3565b6117b8565b6103f161186d565b61042c6101015481565b6103f1611922565b60db546104e59060ff1681565b60335473ffffffffffffffffffffffffffffffffffffffff166103c4565b61042c6101035481565b6104e561062b366004612c69565b611932565b6103c461063e36600461299b565b60cc6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6103f1610673366004612a49565b6119dc565b6104e5610686366004612d00565b611abc565b6104e5610699366004612a49565b60ca6020525f908152604090205460ff1681565b6103f16106bb36600461297b565b611b6c565b60c9546103c49073ffffffffffffffffffffffffffffffffffffffff1681565b6103f16106ee36600461297b565b611bfe565b60d5546103c49073ffffffffffffffffffffffffffffffffffffffff1681565b60d3546103c49073ffffffffffffffffffffffffffffffffffffffff1681565b6103c461074136600461299b565b611c84565b6104e561075436600461299b565b60da6020525f908152604090205460ff1681565b60655473ffffffffffffffffffffffffffffffffffffffff166103c4565b61042c61079436600461299b565b60d46020525f908152604090205481565b6103c46107b336600461299b565b611c94565b6104e56107c6366004612d85565b611ca7565b6104e56107d936600461299b565b60d96020525f908152604090205460ff1681565b61035d6107fb366004612dfe565b611d07565b6103f161080e366004612a49565b611f57565b60ce546103c49073ffffffffffffffffffffffffffffffffffffffff1681565b6103f1610841366004612e31565b612007565b6103f1610854366004612a49565b6120a5565b60db545f908190610100900473ffffffffffffffffffffffffffffffffffffffff1633146108de5760db546040517f8beee3a300000000000000000000000000000000000000000000000000000000815233600482015261010090910473ffffffffffffffffffffffffffffffffffffffff1660248201526044015b60405180910390fd5b5f83815260d9602052604090205460ff16610925576040517f90c7cbf100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f84815260d86020526040902054461461096b576040517f5e67e79300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f84815260d86020908152604080832086905560d990915290205460ff16156109c0576040517f02181a1300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109cb60d0856121cf565b5f94855260cc602052604090942054939473ffffffffffffffffffffffffffffffffffffffff9094169392505050565b60cf5473ffffffffffffffffffffffffffffffffffffffff16338114610a4f576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b60ce805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000808416821790945560cf80549094169093556040519116915f917fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9908390a38173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc60405160405180910390a35050565b60ce5473ffffffffffffffffffffffffffffffffffffffff163314801590610b69575060335473ffffffffffffffffffffffffffffffffffffffff163314155b15610ba2576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b5f81815260da602052604090205460ff1615610bea576040517ffe919e2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81815260da602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f3df150949161462acf3be30521d7da9e533b247327a254e55dd01875897a6df391a250565b60db545f908190610100900473ffffffffffffffffffffffffffffffffffffffff163314610cca5760db546040517f8beee3a300000000000000000000000000000000000000000000000000000000815233600482015261010090910473ffffffffffffffffffffffffffffffffffffffff1660248201526044016108d5565b610cd384611c94565b5f85815260cc602052604081205491935073ffffffffffffffffffffffffffffffffffffffff9091169150836001811115610d1057610d10612e66565b03610d26575f84815260d8602052604090204690555b9250929050565b5f81815260cc602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610d8b576040517f23f3c357000000000000000000000000000000000000000000000000000000008152600481018490526024016108d5565b73ffffffffffffffffffffffffffffffffffffffff165f90815260d7602052604090205492915050565b5f46610dc16101025490565b14610dee577fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef3301610df0565b335b60d55490915073ffffffffffffffffffffffffffffffffffffffff808316911614610e5f576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016108d5565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260ca602052604090205460ff16610ebd576040517fc630ef3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610f15610ecb6101025490565b6040805160208082019390935273ffffffffffffffffffffffffffffffffffffffff8616818301526060808201899052825180830390910181526080909101909152805191012090565b5f81815260d66020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff891690811790915580845260d783529281902084905551338152929350869284917f8f09d7694a9ae17acec5cf132d594d7eee23572f7fe132396ce72b1afbf7ef20910160405180910390a450505050565b610fb86121da565b73ffffffffffffffffffffffffffffffffffffffff8116611005576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f90815260ca602052604090205460ff16611063576040517fc630ef3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f81815260ca602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f4e04a497739580efe78a7ee09cdabe6f6fe90965c683292a519102ce5193b68a9190a250565b6110de6121da565b6110e661225b565b565b60605f6110f560d06122d9565b9050805167ffffffffffffffff81111561111157611111612e93565b60405190808252806020026020018201604052801561113a578160200160208202803683370190505b5081519092505f5b818110156111b65761117783828151811061115f5761115f612ec0565b602002602001015160d06121cf90919063ffffffff16565b84828151811061118957611189612ec0565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101611142565b50505090565b60ce5473ffffffffffffffffffffffffffffffffffffffff1633148015906111fc575060335473ffffffffffffffffffffffffffffffffffffffff163314155b15611235576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b73ffffffffffffffffffffffffffffffffffffffff8116611282576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60cf805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9905f90a35050565b3373111111111111111111111111111111111111111114611361576040517fa2ac02a000000000000000000000000000000000000000000000000000000000815233600482015273111111111111111111111111111111111111111160248201526044016108d5565b46610102540361139d576040517f472477e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6113a960d0856121cf565b6040517fddcc9eec0000000000000000000000000000000000000000000000000000000081526004810185905267ffffffffffffffff8416602482015290915073ffffffffffffffffffffffffffffffffffffffff82169063ddcc9eec906044015f604051808303815f87803b158015611421575f5ffd5b505af1158015611433573d5f5f3e3d5ffd5b5050505050505050565b5f81815260d460205260408082205460c95491517f53b9e632000000000000000000000000000000000000000000000000000000008152600481018290529091839173ffffffffffffffffffffffffffffffffffffffff909116906353b9e63290602401602060405180830381865afa1580156114bc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114e09190612eed565b905073ffffffffffffffffffffffffffffffffffffffff8116611532576040517f64107968000000000000000000000000000000000000000000000000000000008152600481018390526024016108d5565b6040517f97bb3ce90000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8216906397bb3ce990602401602060405180830381865afa15801561159b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115bf9190612eed565b949350505050565b60335473ffffffffffffffffffffffffffffffffffffffff16331480159061162757506115f7618000600f612f08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611660576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b60c9805473ffffffffffffffffffffffffffffffffffffffff9687167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560d580549587169582169590951790945560d380549386169385169390931790925560db8054918516610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff90921691909117905560dc8054919093169116179055565b606061171660d06122d9565b905090565b60db54610100900473ffffffffffffffffffffffffffffffffffffffff1633146117975760db546040517f8beee3a300000000000000000000000000000000000000000000000000000000815233600482015261010090910473ffffffffffffffffffffffffffffffffffffffff1660248201526044016108d5565b6117a28383836122e5565b505050565b6117af6121da565b6110e65f612341565b5f806117c560d0876121cf565b6040517fb473318e00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044810185905290915073ffffffffffffffffffffffffffffffffffffffff82169063b473318e90606401602060405180830381865afa15801561183f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118639190612f59565b9695505050505050565b606554339073ffffffffffffffffffffffffffffffffffffffff168114611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084016108d5565b61191f81612341565b50565b61192a6121da565b6110e6612372565b60d3546040517f18b7fc220000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff16906318b7fc2290611992908a908a908a908a908a908a90600401613000565b602060405180830381865afa1580156119ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119d191906130dd565b979650505050505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314801590611a3c5750611a0c618000600f612f08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611a75576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b60dc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60d3546040517fda24b3ee0000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff169063da24b3ee90611b20908c908c908c908c908c908c908c908c906004016130f8565b602060405180830381865afa158015611b3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5f91906130dd565b9998505050505050505050565b611b79618000600f612f08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bdf576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b610102829055610103819055611bf68260016123cd565b610101555050565b60dc5473ffffffffffffffffffffffffffffffffffffffff163314801590611c3a57503373ffffffffffffffffffffffffffffffffffffffff14155b15611c73576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b5f91825260d4602052604090912055565b5f611c8e82611c94565b92915050565b5f611ca060d08361242d565b9392505050565b60d3546040517fe896760d0000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff169063e896760d90611992908a908a908a908a908a908a90600401613177565b60db545f908190610100900473ffffffffffffffffffffffffffffffffffffffff163314611d875760db546040517f8beee3a300000000000000000000000000000000000000000000000000000000815233600482015261010090910473ffffffffffffffffffffffffffffffffffffffff1660248201526044016108d5565b505f84815260d6602052604090205473ffffffffffffffffffffffffffffffffffffffff1680611de6576040517fce63ce17000000000000000000000000000000000000000000000000000000008152600481018690526024016108d5565b5f84815260d86020526040902054469003611e2f576040517f587df4260000000000000000000000000000000000000000000000000000000081524660048201526024016108d5565b5f84815260d86020908152604080832046905560cc825280832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861617905560d48252808320863590819055835260da909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610102544614611f4457611ede620100006010612f08565b73ffffffffffffffffffffffffffffffffffffffff166327aff300846040518263ffffffff1660e01b8152600401611f169190613228565b5f604051808303815f87803b158015611f2d575f5ffd5b505af1158015611f3f573d5f5f3e3d5ffd5b505050505b611f4d84611c94565b9150935093915050565b611f5f6121da565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155611fc260335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61200f612448565b61201c618000600f612f08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612082576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108d5565b61208a6124a8565b6120948382611b6c565b61209d82612341565b6117a26125a8565b6120ad6121da565b73ffffffffffffffffffffffffffffffffffffffff81166120fa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f90815260ca602052604090205460ff1615612159576040517fec27343900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f81815260ca602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f2eae91be1021e05cc8076387b0182458ae474ae44ee44cc59aefda6ca53c1f429190a250565b5f611ca08383612627565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d5565b6122636126b0565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390a1565b60605f611ca08361271c565b6122f160d08484612727565b5080801561230a57506101035461230860d0612749565b115b156117a2576040517f601b688200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606580547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561191f81612753565b61237a6127c9565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122ae3390565b5f826123dd620100006004612f08565b60408051602081019390935273ffffffffffffffffffffffffffffffffffffffff918216908301528316606082015260800160405160208183030381529060405280519060200120905092915050565b5f80808061243b8686612836565b9097909650945050505050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf480546001909155801561191f576040517fdf3a8fdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff161561253f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960448201527f616c697a696e670000000000000000000000000000000000000000000000000060648201526084016108d5565b5f5460ff908116146110e6575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016122cf565b600160da5f6125b76101015490565b81526020019081526020015f205f6101000a81548160ff021916908315150217905550600160d95f6125e96101025490565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b5f8181526002830160205260408120548015158061264a575061264a848461286e565b611ca0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b6579000060448201526064016108d5565b60975460ff166110e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016108d5565b6060611c8e82612879565b5f6115bf848473ffffffffffffffffffffffffffffffffffffffff8516612885565b5f611c8e826128a1565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60975460ff16156110e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016108d5565b5f81815260028301602052604081205481908061286357612857858561286e565b92505f9150610d269050565b600192509050610d26565b5f611ca083836128ab565b60605f611ca0836128c2565b5f82815260028401602052604081208290556115bf848461291b565b5f611c8e82612926565b5f8181526001830160205260408120541515611ca0565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561290f57602002820191905f5260205f20905b8154815260200190600101908083116128fb575b50505050509050919050565b5f611ca0838361292f565b5f611c8e825490565b5f81815260018301602052604081205461297457508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611c8e565b505f611c8e565b5f5f6040838503121561298c575f5ffd5b50508035926020909101359150565b5f602082840312156129ab575f5ffd5b5035919050565b8035600281106129c0575f5ffd5b919050565b5f5f604083850312156129d6575f5ffd5b823591506129e6602084016129b2565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461191f575f5ffd5b80356129c0816129ef565b5f5f60408385031215612a2c575f5ffd5b823591506020830135612a3e816129ef565b809150509250929050565b5f60208284031215612a59575f5ffd5b8135611ca0816129ef565b602080825282518282018190525f918401906040840190835b81811015612ab157835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612a7d565b509095945050505050565b5f5f5f60608486031215612ace575f5ffd5b8335925060208401359150604084013567ffffffffffffffff81168114612af3575f5ffd5b809150509250925092565b5f5f5f5f5f60a08688031215612b12575f5ffd5b8535612b1d816129ef565b94506020860135612b2d816129ef565b93506040860135612b3d816129ef565b92506060860135612b4d816129ef565b91506080860135612b5d816129ef565b809150509295509295909350565b602080825282518282018190525f918401906040840190835b81811015612ab1578351835260209384019390920191600101612b84565b801515811461191f575f5ffd5b5f5f5f60608486031215612bc1575f5ffd5b833592506020840135612bd3816129ef565b91506040840135612af381612ba2565b5f5f5f5f60808587031215612bf6575f5ffd5b5050823594602084013594506040840135936060013592509050565b5f60608284031215612c22575f5ffd5b50919050565b5f5f83601f840112612c38575f5ffd5b50813567ffffffffffffffff811115612c4f575f5ffd5b6020830191508360208260051b8501011115610d26575f5ffd5b5f5f5f5f5f5f60a08789031215612c7e575f5ffd5b863595506020870135945060408701359350606087013567ffffffffffffffff811115612ca9575f5ffd5b612cb589828a01612c12565b935050608087013567ffffffffffffffff811115612cd1575f5ffd5b612cdd89828a01612c28565b979a9699509497509295939492505050565b803561ffff811681146129c0575f5ffd5b5f5f5f5f5f5f5f5f60e0898b031215612d17575f5ffd5b88359750602089013596506040890135955060608901359450612d3c60808a01612cef565b935060a089013567ffffffffffffffff811115612d57575f5ffd5b612d638b828c01612c28565b9094509250612d76905060c08a016129b2565b90509295985092959890939650565b5f5f5f5f5f5f868803610140811215612d9c575f5ffd5b87359650602088013595506040880135945060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa082011215612ddd575f5ffd5b5060608701925061012087013567ffffffffffffffff811115612cd1575f5ffd5b5f5f5f60a08486031215612e10575f5ffd5b8335925060208401359150612e288560408601612c12565b90509250925092565b5f5f5f60608486031215612e43575f5ffd5b833592506020840135612e55816129ef565b929592945050506040919091013590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215612efd575f5ffd5b8151611ca0816129ef565b73ffffffffffffffffffffffffffffffffffffffff8181168382160190811115611c8e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f60208284031215612f69575f5ffd5b5051919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612fe7575f5ffd5b8260051b80836020870137939093016020019392505050565b86815285602082015284604082015260a0606082015261ffff61302285612cef565b1660a08201525f6020850135613037816129ef565b73ffffffffffffffffffffffffffffffffffffffff1660c08301526040850135368690037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112613087575f5ffd5b850160208101903567ffffffffffffffff8111156130a3575f5ffd5b8036038213156130b1575f5ffd5b606060e08501526130c761010085018284612f70565b9150508281036080840152611b5f818587612fb7565b5f602082840312156130ed575f5ffd5b8151611ca081612ba2565b88815287602082015286604082015285606082015261ffff8516608082015260e060a08201525f61312d60e083018587612fb7565b905060028310613164577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8260c08301529998505050505050505050565b8681528560208201528460408201525f843560ff8116808214613198575f5ffd5b60608401525060208501356131ac81612ba2565b1515608083015261ffff6131c260408701612cef565b1660a08301526131d460608601612a10565b73ffffffffffffffffffffffffffffffffffffffff1660c0830152608085013560e083015260a0850135610100830152610140610120830181905261321c9083018486612fb7565b98975050505050505050565b8135815260208083013590820152606081016040830135613248816129ef565b73ffffffffffffffffffffffffffffffffffffffff81166040840152509291505056fea2646970667358221220e7fee3cbd1b39b043a9e397507d9eb2c095bad6ba86b2d731aacba132a6404b364736f6c634300081c0033" ], [ "0x0000000000000000000000000000000000010003", - "0x60806040526004361061020f575f3560e01c80638da5cb5b11610117578063cfe7af7c116100ac578063ef011dff1161007c578063f54266a211610062578063f54266a214610663578063f5f1516814610682578063f95f5c10146106a1575f5ffd5b8063ef011dff1461062f578063f2fde38b14610644575f5ffd5b8063cfe7af7c146105b4578063d9caed12146105c7578063da556bdc146105e6578063e30c397814610605575f5ffd5b8063c4879440116100e7578063c487944014610540578063cb944dec14610553578063cc06b5ca14610569578063cdf2543014610588575f5ffd5b80638da5cb5b146104ad578063969b53da146104d75780639c884fd114610501578063c438a9f214610514575f5ffd5b8063548a5a33116101a7578063715018a6116101775780637ac3a5531161015d5780637ac3a553146104395780638456cb591461045857806385e4e16a1461046c575f5ffd5b8063715018a61461041157806379ba509714610425575f5ffd5b8063548a5a331461038557806354b2e69c146103a45780635c975abb146103c35780635d4edca7146103e5575f5ffd5b80633f4ba83a116101e25780633f4ba83a146102cc5780634a2e35ba146102e05780634d7e3d62146102ff57806353b9e6321461031f575f5ffd5b80632432ef26146102135780632ed342aa1461025c5780632f90b1841461027d5780632ff0b2ea146102a0575b5f5ffd5b610226610221366004613783565b6106c0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b348015610267575f5ffd5b5061027b6102763660046137fc565b6109a1565b005b348015610288575f5ffd5b5061029260fc5481565b604051908152602001610253565b3480156102ab575f5ffd5b506102bf6102ba366004613947565b610a33565b60405161025391906139e8565b3480156102d7575f5ffd5b5061027b610ac9565b3480156102eb575f5ffd5b506102926102fa3660046139fa565b610adb565b61031261030d366004613a3e565b610bcf565b6040516102539190613a86565b34801561032a575f5ffd5b506103606103393660046137fc565b60c96020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610253565b348015610390575f5ffd5b5061027b61039f366004613b86565b610df5565b3480156103af575f5ffd5b5061027b6103be366004613bb4565b610e11565b3480156103ce575f5ffd5b5060975460ff166040519015158152602001610253565b3480156103f0575f5ffd5b5060fb546103609073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041c575f5ffd5b5061027b610e94565b348015610430575f5ffd5b5061027b610ea5565b348015610444575f5ffd5b5061027b610453366004613c34565b610f57565b348015610463575f5ffd5b5061027b6110b5565b348015610477575f5ffd5b506103606104863660046137fc565b60ca6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156104b8575f5ffd5b5060335473ffffffffffffffffffffffffffffffffffffffff16610360565b3480156104e2575f5ffd5b5060fe5473ffffffffffffffffffffffffffffffffffffffff16610360565b61027b61050f366004613c84565b6110c5565b34801561051f575f5ffd5b5060ff546103609073ffffffffffffffffffffffffffffffffffffffff1681565b61027b61054e366004613cd3565b611324565b34801561055e575f5ffd5b506102926101005481565b348015610574575f5ffd5b5061027b610583366004613d0f565b6113ae565b348015610593575f5ffd5b5060fe546103609073ffffffffffffffffffffffffffffffffffffffff1681565b61027b6105c2366004613bb4565b6114ac565b3480156105d2575f5ffd5b5061027b6105e1366004613d72565b6115a4565b3480156105f1575f5ffd5b5061027b610600366004613db0565b6116cd565b348015610610575f5ffd5b5060655473ffffffffffffffffffffffffffffffffffffffff16610360565b34801561063a575f5ffd5b5061029260fd5481565b34801561064f575f5ffd5b5061027b61065e366004613de6565b611786565b34801561066e575f5ffd5b5061036061067d366004613de6565b611836565b34801561068d575f5ffd5b5061036061069c366004613de6565b6119f6565b3480156106ac575f5ffd5b5061027b6106bb366004613e08565b611b33565b5f6106cf62010000600e613e83565b339073ffffffffffffffffffffffffffffffffffffffff16811461073d576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b505f5f61074a8787611c7b565b9150915060fc548214158015610775575073ffffffffffffffffffffffffffffffffffffffff811630145b81906107c6576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b5060048411610801576040517f97da9c1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9c884fd10000000000000000000000000000000000000000000000000000000061082f60045f8789613eaf565b61083891613ed6565b7fffffffff00000000000000000000000000000000000000000000000000000000161461086860045f8789613eaf565b61087191613ed6565b906108cd576040517f12ba286f0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610734565b505f3073ffffffffffffffffffffffffffffffffffffffff163487876040516108f7929190613f3c565b5f6040518083038185875af1925050503d805f8114610931576040519150601f19603f3d011682016040523d82523d5f602084013e610936565b606091505b5050905080610971576040517ff407261600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b507f2432ef2600000000000000000000000000000000000000000000000000000000925050505b95945050505050565b6109af620100006004613e83565b339073ffffffffffffffffffffffffffffffffffffffff168114610a18576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b50610a3081610a2b620100006004613e83565b611cd4565b50565b6060468383604051602401610a4a93929190613f4b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9c884fd10000000000000000000000000000000000000000000000000000000017905290509392505050565b610ad1611d51565b610ad9611dd2565b565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f90808203610b38576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018114610b72576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455610ba38484336001611e50565b60017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455949350505050565b610bf360405180606001604052806060815260200160608152602001606081525090565b610c0162010000600d613e83565b339073ffffffffffffffffffffffffffffffffffffffff168114610c6a576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b505f610c878787878787610c82620100006004613e83565b612116565b6040805160018082528183019092529192505f9190816020015b6060815260200190600190039081610ca157505060405160248101889052909150604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f54b1652900000000000000000000000000000000000000000000000000000000179052815182905f90610d4d57610d4d613f69565b60200260200101819052506040518060600160405280610dd984602001516040517e010000001400000000000000000000000000000000000000000000000000006020820152606082811b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602683015290603a016040516020818303038152906040529050919050565b8152604093840151602082015292909201529695505050505050565b610e0d610e06620100006004613e83565b83836121f7565b5050565b60ff54339073ffffffffffffffffffffffffffffffffffffffff168114610e7d576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b50610e8c86868686868661236a565b505050505050565b610e9c611d51565b610ad95f61243b565b606554339073ffffffffffffffffffffffffffffffffffffffff168114610f4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610734565b610a308161243b565b60ff54339073ffffffffffffffffffffffffffffffffffffffff168114610fc3576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b507f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f819003611020576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001811461105a576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf45561108a8585858561246c565b60017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4555050505050565b6110bd611d51565b610ad96124f8565b8360fc54810361116d5760fe5473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330173ffffffffffffffffffffffffffffffffffffffff161415801561112f5750333014155b15611168576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610734565b6111a8565b3330146111a8576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610734565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f819003611204576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001811461123e576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455610100548581036112a2576040517f04a0b7e900000000000000000000000000000000000000000000000000000000815260040161073491815260200190565b506112bd868686866112b8620100006004613e83565b612553565b84867f44eb9a840094a49b3cd0a5205042598a1c08c4e87bafb5760bc2d8efa170c54186866040516112f0929190613fdd565b60405180910390a360017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455505050505050565b61133262010000600d613e83565b339073ffffffffffffffffffffffffffffffffffffffff16811461139b576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b506113a8848484846126a4565b50505050565b6113b661280c565b6113c3618000600f613e83565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611429576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610734565b611437620100006002613e83565b60fb80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905561148461286c565b6114918686868686611b33565b6114a382610a2b620100006004613e83565b610e8c8161243b565b60fc5460fe5473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330173ffffffffffffffffffffffffffffffffffffffff16143390611553576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b5061158d565b6040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610734565b61159b87878787878761236a565b50505050505050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f819003611600576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001811461163a576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455815f03611697576040517f5e85ae7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116a38484843361246c565b60017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf45550505050565b8260fc5481036115595760fe5473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330173ffffffffffffffffffffffffffffffffffffffff1614339061177b576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b506113a88383611cd4565b61178e611d51565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556117f160335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f80611846620100006004613e83565b6040517ffd3f60df00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063fd3f60df90602401602060405180830381865afa1580156118b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118d69190613ff0565b9050806118e557505f92915050565b5f6118f4620100006004613e83565b73ffffffffffffffffffffffffffffffffffffffff16635f3455b5836040518263ffffffff1660e01b815260040161192e91815260200190565b602060405180830381865afa158015611949573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196d9190613ff0565b905060fc54811461198157505f9392505050565b8373ffffffffffffffffffffffffffffffffffffffff166313096a416040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ca573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ee9190614007565b949350505050565b5f80611a06620100006004613e83565b6040517ff5f1516800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192505f9183169063f5f1516890602401602060405180830381865afa158015611a75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a999190614007565b905073ffffffffffffffffffffffffffffffffffffffff811615611abe579392505050565b60fc546040517fc487412c000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff858116602483015283169063c487412c90604401602060405180830381865afa1580156119ca573d5f5f3e3d5ffd5b611b40618000600f613e83565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ba6576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610734565b60ff80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff848116919091179091558316611c23576040517f7138356f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fc949094555060fe80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556101009190915560fd55565b5f5f5f611c88858561296c565b90945092509050848482611cca576040517fe7c8d4cf000000000000000000000000000000000000000000000000000000008152600401610734929190613fdd565b5050509250929050565b5f82815260c9602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917f2632cc0d58b0cb1017b99cc0b6cc66ad86440cc0dd923bfdaa294f95ba1b02019190a35050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610734565b611dda612a2a565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390a1565b5f5f611e7260fc545f8887895f620100006004611e6d9190613e83565b612a96565b905060608380611e98575060ff5473ffffffffffffffffffffffffffffffffffffffff16155b15611eb957611ea78783612c08565b9050611eb281612c1e565b92506120b9565b5f611ec8620100006004613e83565b73ffffffffffffffffffffffffffffffffffffffff166397bb3ce9896040518263ffffffff1660e01b8152600401611f0291815260200190565b602060405180830381865afa158015611f1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f419190614007565b73ffffffffffffffffffffffffffffffffffffffff166313096a416040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f89573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fad9190614007565b90508773ffffffffffffffffffffffffffffffffffffffff8216612000576040517f04a0b7e900000000000000000000000000000000000000000000000000000000815260040161073491815260200190565b505f5f61200c89612ca4565b509150915061201c818484612d03565b60ff546040517fff21c12500000000000000000000000000000000000000000000000000000000815291955073ffffffffffffffffffffffffffffffffffffffff169063ff21c125906120739087906004016139e8565b6020604051808303815f875af115801561208f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120b39190613ff0565b95505050505b868573ffffffffffffffffffffffffffffffffffffffff167f55362fc62473cb1255e770af5d5e02ba6ee5bc7ed6969c30eb11ca31b92384dc60fc5489604051612104929190614022565b60405180910390a35050949350505050565b61215b6040518060a001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020015f81525090565b612163612d10565b5f84845f81811061217657612176613f69565b7fff00000000000000000000000000000000000000000000000000000000000000920135821692505081016121bb576121b3888888888888612d7d565b9150506121ed565b6040517f084a144900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff8416145f8161221c573361222a565b61222a620100006004613e83565b604080514660208083019190915273ffffffffffffffffffffffffffffffffffffffff8416828401526060808301899052835180840390910181526080909201909252805191012090915082806122a357505f81815260ca602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b33906122f4576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b506122ff8185611cd4565b5f81815260ca602052604080822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016339081179091559051879284917f14c1bae9bcc3777747463b66a36584aa75e4ded1aa38089f447beecb125a21759190a4505050505050565b5f61237760fc5486612f45565b90505f6123bc8888888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612fa592505050565b60fc546040517f9c884fd10000000000000000000000000000000000000000000000000000000081529192503091639c884fd1913491612403919087908790600401613f4b565b5f604051808303818588803b15801561241a575f5ffd5b505af115801561242c573d5f5f3e3d5ffd5b50505050505050505050505050565b606580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610a3081612fda565b5f61247684611836565b905073ffffffffffffffffffffffffffffffffffffffff81166124c5576040517f1850b46b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6124d260fc5483612f45565b90505f6124e0858888613050565b90506124ee8282865f611e50565b5050505050505050565b612500612d10565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e253390565b5f84815260c9602052604090205473ffffffffffffffffffffffffffffffffffffffff16801561260a576040517f36ba035500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906336ba03559034906125d7908a908a908a908a9060040161403a565b5f604051808303818588803b1580156125ee575f5ffd5b505af1158015612600573d5f5f3e3d5ffd5b5050505050610e8c565b6126148583611cd4565b6040517f36ba035500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906336ba035590349061266e908a908a908a908a9060040161403a565b5f604051808303818588803b158015612685575f5ffd5b505af1158015612697573d5f5f3e3d5ffd5b5050505050505050505050565b5f83815260c9602052604090205473ffffffffffffffffffffffffffffffffffffffff168381612703576040517ffde974f400000000000000000000000000000000000000000000000000000000815260040161073491815260200190565b508073ffffffffffffffffffffffffffffffffffffffff1663699b0fb934875f8888612730895f5f613050565b6040518763ffffffff1660e01b8152600401612750959493929190614059565b5f6040518083038185885af115801561276b573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526127b191908101906140a4565b50604080518581526020810184905273ffffffffffffffffffffffffffffffffffffffff85169187917f0f87e1ea5eb1f034a6071ef630c174063e3d48756f853efaaf4292b929298240910160405180910390a35050505050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4805460019091558015610a30576040517fdf3a8fdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615612903576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960448201527f616c697a696e67000000000000000000000000000000000000000000000000006064820152608401610734565b5f5460ff90811614610ad9575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611e46565b5f5f5f5f5f365f365f61297f8b8b6130a6565b9550955095509550955095508580156129b857507fffff0000000000000000000000000000000000000000000000000000000000008516155b80156129c45750602183105b80156129d857508015806129d85750601481145b6129e4575f5f5f612a17565b60016129f1846008614119565b6129fd90610100614130565b612a078587614143565b901c612a13838561417f565b60601c5b9850985098505050505050509250925092565b60975460ff16610ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610734565b5f85815260c9602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1680612b47576040517f49b4085300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906349b4085390612b169088908b906004016141e4565b5f604051808303815f87803b158015612b2d575f5ffd5b505af1158015612b3f573d5f5f3e3d5ffd5b505050508290505b5f84612b53575f612b55565b345b90508173ffffffffffffffffffffffffffffffffffffffff1663699b0fb9828c8c8c8c8c6040518763ffffffff1660e01b8152600401612b99959493929190614059565b5f6040518083038185885af1158015612bb4573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612bfa91908101906140a4565b9a9950505050505050505050565b6060612c15468484613230565b90505b92915050565b5f612c2c6180006008613e83565b73ffffffffffffffffffffffffffffffffffffffff166362f84b24836040518263ffffffff1660e01b8152600401612c6491906139e8565b6020604051808303815f875af1158015612c80573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c189190613ff0565b5f5f5f8351606014612ce2576040517fde4c0b9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83806020019051810190612cf69190614205565b9196909550909350915050565b60606119ee84848461326a565b60975460ff1615610ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610734565b612dc26040518060a001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020015f81525090565b5f84845f818110612dd557612dd5613f69565b9050013560f81c60f81b90505f5f612def838a89896132da565b9150915081612dfc61331d565b73ffffffffffffffffffffffffffffffffffffffff1663e52db4ca8c6040518263ffffffff1660e01b8152600401612e3691815260200190565b602060405180830381865afa158015612e51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e759190613ff0565b14158290612eb2576040517f04a0b7e900000000000000000000000000000000000000000000000000000000815260040161073491815260200190565b505f612ec48b8a858d8660018c612a96565b90505f612ed4858c868a87613331565b9050612ee28b85848461354a565b95508a73ffffffffffffffffffffffffffffffffffffffff16818d7fe21913bc89c1320d9709a5d236ffe06b54cf88aecfc9509ebd68f1adba45781e8786604051612f2e929190614022565b60405180910390a450505050509695505050505050565b5f82612f55620100006004613e83565b60408051602081019390935273ffffffffffffffffffffffffffffffffffffffff918216908301528316606082015260800160405160208183030381529060405280519060200120905092915050565b60608585858585604051602001612fc095949392919061423b565b604051602081830303815290604052905095945050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606083838360405160200161308e9392919092835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405160208183030381529060405290509392505050565b60015f3681818160068710156130cc57505f945084935083925082915081905080613226565b7fffff0000000000000000000000000000000000000000000000000000000000008835167e01000000000000000000000000000000000000000000000000000000000000811461312e57505f9550859450849350839250829150819050613226565b60028901357fffff0000000000000000000000000000000000000000000000000000000000001695505f8989600481811061316b5761316b613f69565b919091013560f81c9150506006810160ff1689101561319e57505f96508695508594508493508392508291506132269050565b6131b1600582810160ff16908b8d613eaf565b955095505f8a8a8360050160ff168181106131ce576131ce613f69565b919091013560f81c91505081810160060160ff168a101561320457505f9750879650869550859450849350839250613226915050565b61321e60ff60068484018101821691908501168c8e613eaf565b945094505050505b9295509295509295565b60405160609061308e907f9c884fd100000000000000000000000000000000000000000000000000000000908690869086906020016142be565b6040517f11a2ccc1000000000000000000000000000000000000000000000000000000006020820152606084811b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602484015284821b166038830152604c820183905290606c0161308e565b5f60607fff00000000000000000000000000000000000000000000000000000000000000868116016121bb576133108484613647565b9097909650945050505050565b5f61332c620100006002613e83565b905090565b5f7fff0000000000000000000000000000000000000000000000000000000000000086166134b2576040517f97bb3ce9000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff8516906397bb3ce990602401602060405180830381865afa1580156133c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133e89190614007565b90505f6133f54683612f45565b905080861461344f576040517f1929b7de0000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff83166024820152604401610734565b5f61345985612ca4565b50506040805173ffffffffffffffffffffffffffffffffffffffff808c16602083015286169181019190915260608101829052909150608001604051602081830303815290604052805190602001209350505050610998565b7fff00000000000000000000000000000000000000000000000000000000000000868116016121bb57858585846040516020016134f1939291906142fd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261352d9291602001614331565b604051602081830303815290604052805190602001209050610998565b61358f6040518060a001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020015f81525090565b5f61359b868686610a33565b6040805160a08101909152909150806135d560017fa175e001c0e5684bc26302c2f9a55aec9f3936fe2aef558034003ef4da7fc77e614130565b81526020016135e8620100006003613e83565b73ffffffffffffffffffffffffffffffffffffffff1681526020808201849052604080515f808252928101825292019190613633565b606081526020019060019003908161361e5790505b508152602001939093525090949350505050565b5f60606021831015613685576040517f9b821ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f010000000000000000000000000000000000000000000000000000000000000084845f816136b6576136b6613f69565b9050013560f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613719576040517f084a144900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6137268360018187613eaf565b81019061373391906139fa565b909590945092505050565b5f5f83601f84011261374e575f5ffd5b50813567ffffffffffffffff811115613765575f5ffd5b60208301915083602082850101111561377c575f5ffd5b9250929050565b5f5f5f5f5f60608688031215613797575f5ffd5b85359450602086013567ffffffffffffffff8111156137b4575f5ffd5b6137c08882890161373e565b909550935050604086013567ffffffffffffffff8111156137df575f5ffd5b6137eb8882890161373e565b969995985093965092949392505050565b5f6020828403121561380c575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610a30575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156138a8576138a8613834565b604052919050565b5f67ffffffffffffffff8211156138c9576138c9613834565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112613904575f5ffd5b8135613917613912826138b0565b613861565b81815284602083860101111561392b575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215613959575f5ffd5b833561396481613813565b925060208401359150604084013567ffffffffffffffff811115613986575f5ffd5b613992868287016138f5565b9150509250925092565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f612c15602083018461399c565b5f5f60408385031215613a0b575f5ffd5b82359150602083013567ffffffffffffffff811115613a28575f5ffd5b613a34858286016138f5565b9150509250929050565b5f5f5f5f5f60808688031215613a52575f5ffd5b853594506020860135613a6481613813565b935060408601359250606086013567ffffffffffffffff8111156137df575f5ffd5b602081525f825160606020840152613aa1608084018261399c565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152613adc828261399c565b91505060408401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084830301606085015281815180845260208401915060208160051b8501016020840193505f5b82811015613b7a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868303018452613b6582865161399c565b60209586019594909401939150600101613b2b565b50979650505050505050565b5f5f60408385031215613b97575f5ffd5b823591506020830135613ba981613813565b809150509250929050565b5f5f5f5f5f5f60a08789031215613bc9575f5ffd5b8635613bd481613813565b95506020870135613be481613813565b94506040870135613bf481613813565b935060608701359250608087013567ffffffffffffffff811115613c16575f5ffd5b613c2289828a0161373e565b979a9699509497509295939492505050565b5f5f5f5f60808587031215613c47575f5ffd5b8435613c5281613813565b93506020850135613c6281613813565b9250604085013591506060850135613c7981613813565b939692955090935050565b5f5f5f5f60608587031215613c97575f5ffd5b8435935060208501359250604085013567ffffffffffffffff811115613cbb575f5ffd5b613cc78782880161373e565b95989497509550505050565b5f5f5f5f60808587031215613ce6575f5ffd5b84359350602085013592506040850135613cff81613813565b9396929550929360600135925050565b5f5f5f5f5f5f60c08789031215613d24575f5ffd5b86359550602087013594506040870135613d3d81613813565b93506060870135613d4d81613813565b92506080870135915060a0870135613d6481613813565b809150509295509295509295565b5f5f5f60608486031215613d84575f5ffd5b8335613d8f81613813565b92506020840135613d9f81613813565b929592945050506040919091013590565b5f5f5f60608486031215613dc2575f5ffd5b83359250602084013591506040840135613ddb81613813565b809150509250925092565b5f60208284031215613df6575f5ffd5b8135613e0181613813565b9392505050565b5f5f5f5f5f60a08688031215613e1c575f5ffd5b85359450602086013593506040860135613e3581613813565b92506060860135613e4581613813565b949793965091946080013592915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8181168382160190811115612c1857612c18613e56565b5f5f85851115613ebd575f5ffd5b83861115613ec9575f5ffd5b5050820193919092039150565b80357fffffffff000000000000000000000000000000000000000000000000000000008116906004841015613f35577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b818382375f9101908152919050565b838152826020820152606060408201525f610998606083018461399c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f6119ee602083018486613f96565b5f60208284031215614000575f5ffd5b5051919050565b5f60208284031215614017575f5ffd5b8151613e0181613813565b828152604060208201525f6119ee604083018461399c565b848152836020820152606060408201525f6121ed606083018486613f96565b85815284602082015283604082015273ffffffffffffffffffffffffffffffffffffffff8316606082015260a060808201525f61409960a083018461399c565b979650505050505050565b5f602082840312156140b4575f5ffd5b815167ffffffffffffffff8111156140ca575f5ffd5b8201601f810184136140da575f5ffd5b80516140e8613912826138b0565b8181528560208385010111156140fc575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b8082028115828204841417612c1857612c18613e56565b81810381811115612c1857612c18613e56565b80356020831015612c18577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116906014841015613f35577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808560140360031b1b82161691505092915050565b604081525f6141f6604083018561399c565b90508260208301529392505050565b5f5f5f60608486031215614217575f5ffd5b8351602085015190935061422a81613813565b6040850151909250613ddb81613813565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015273ffffffffffffffffffffffffffffffffffffffff8416604082015282606082015260a060808201525f61409960a083018461399c565b5f81518060208401855e5f93019283525090919050565b7fffffffff00000000000000000000000000000000000000000000000000000000851681528360048201528260248201525f6121ed60448301846142a7565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201525f610998606083018461399c565b7fff00000000000000000000000000000000000000000000000000000000000000831681525f6119ee60018301846142a756fea2646970667358221220f56be0a5c80ec09ab9d91f3884eb00f684c7560e812a0873849937648820381064736f6c634300081c0033" + "0x60806040526004361061020f575f3560e01c80638da5cb5b11610117578063cfe7af7c116100ac578063ef011dff1161007c578063f54266a211610062578063f54266a214610663578063f5f1516814610682578063f95f5c10146106a1575f5ffd5b8063ef011dff1461062f578063f2fde38b14610644575f5ffd5b8063cfe7af7c146105b4578063d9caed12146105c7578063da556bdc146105e6578063e30c397814610605575f5ffd5b8063c4879440116100e7578063c487944014610540578063cb944dec14610553578063cc06b5ca14610569578063cdf2543014610588575f5ffd5b80638da5cb5b146104ad578063969b53da146104d75780639c884fd114610501578063c438a9f214610514575f5ffd5b8063548a5a33116101a7578063715018a6116101775780637ac3a5531161015d5780637ac3a553146104395780638456cb591461045857806385e4e16a1461046c575f5ffd5b8063715018a61461041157806379ba509714610425575f5ffd5b8063548a5a331461038557806354b2e69c146103a45780635c975abb146103c35780635d4edca7146103e5575f5ffd5b80633f4ba83a116101e25780633f4ba83a146102cc5780634a2e35ba146102e05780634d7e3d62146102ff57806353b9e6321461031f575f5ffd5b80632432ef26146102135780632ed342aa1461025c5780632f90b1841461027d5780632ff0b2ea146102a0575b5f5ffd5b610226610221366004613783565b6106c0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b348015610267575f5ffd5b5061027b6102763660046137fc565b6109a1565b005b348015610288575f5ffd5b5061029260fc5481565b604051908152602001610253565b3480156102ab575f5ffd5b506102bf6102ba366004613947565b610a33565b60405161025391906139e8565b3480156102d7575f5ffd5b5061027b610ac9565b3480156102eb575f5ffd5b506102926102fa3660046139fa565b610adb565b61031261030d366004613a3e565b610bcf565b6040516102539190613a86565b34801561032a575f5ffd5b506103606103393660046137fc565b60c96020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610253565b348015610390575f5ffd5b5061027b61039f366004613b86565b610df5565b3480156103af575f5ffd5b5061027b6103be366004613bb4565b610e11565b3480156103ce575f5ffd5b5060975460ff166040519015158152602001610253565b3480156103f0575f5ffd5b5060fb546103609073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041c575f5ffd5b5061027b610e94565b348015610430575f5ffd5b5061027b610ea5565b348015610444575f5ffd5b5061027b610453366004613c34565b610f57565b348015610463575f5ffd5b5061027b6110b5565b348015610477575f5ffd5b506103606104863660046137fc565b60ca6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156104b8575f5ffd5b5060335473ffffffffffffffffffffffffffffffffffffffff16610360565b3480156104e2575f5ffd5b5060fe5473ffffffffffffffffffffffffffffffffffffffff16610360565b61027b61050f366004613c84565b6110c5565b34801561051f575f5ffd5b5060ff546103609073ffffffffffffffffffffffffffffffffffffffff1681565b61027b61054e366004613cd3565b611324565b34801561055e575f5ffd5b506102926101005481565b348015610574575f5ffd5b5061027b610583366004613d0f565b6113ae565b348015610593575f5ffd5b5060fe546103609073ffffffffffffffffffffffffffffffffffffffff1681565b61027b6105c2366004613bb4565b6114ac565b3480156105d2575f5ffd5b5061027b6105e1366004613d72565b6115a4565b3480156105f1575f5ffd5b5061027b610600366004613db0565b6116cd565b348015610610575f5ffd5b5060655473ffffffffffffffffffffffffffffffffffffffff16610360565b34801561063a575f5ffd5b5061029260fd5481565b34801561064f575f5ffd5b5061027b61065e366004613de6565b611786565b34801561066e575f5ffd5b5061036061067d366004613de6565b611836565b34801561068d575f5ffd5b5061036061069c366004613de6565b6119f6565b3480156106ac575f5ffd5b5061027b6106bb366004613e08565b611b33565b5f6106cf62010000600e613e83565b339073ffffffffffffffffffffffffffffffffffffffff16811461073d576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b505f5f61074a8787611c7b565b9150915060fc548214158015610775575073ffffffffffffffffffffffffffffffffffffffff811630145b81906107c6576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b5060048411610801576040517f97da9c1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9c884fd10000000000000000000000000000000000000000000000000000000061082f60045f8789613eaf565b61083891613ed6565b7fffffffff00000000000000000000000000000000000000000000000000000000161461086860045f8789613eaf565b61087191613ed6565b906108cd576040517f12ba286f0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610734565b505f3073ffffffffffffffffffffffffffffffffffffffff163487876040516108f7929190613f3c565b5f6040518083038185875af1925050503d805f8114610931576040519150601f19603f3d011682016040523d82523d5f602084013e610936565b606091505b5050905080610971576040517ff407261600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b507f2432ef2600000000000000000000000000000000000000000000000000000000925050505b95945050505050565b6109af620100006004613e83565b339073ffffffffffffffffffffffffffffffffffffffff168114610a18576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b50610a3081610a2b620100006004613e83565b611cd4565b50565b6060468383604051602401610a4a93929190613f4b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9c884fd10000000000000000000000000000000000000000000000000000000017905290509392505050565b610ad1611d51565b610ad9611dd2565b565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f90808203610b38576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018114610b72576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455610ba38484336001611e50565b60017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455949350505050565b610bf360405180606001604052806060815260200160608152602001606081525090565b610c0162010000600d613e83565b339073ffffffffffffffffffffffffffffffffffffffff168114610c6a576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b505f610c878787878787610c82620100006004613e83565b612116565b6040805160018082528183019092529192505f9190816020015b6060815260200190600190039081610ca157505060405160248101889052909150604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f54b1652900000000000000000000000000000000000000000000000000000000179052815182905f90610d4d57610d4d613f69565b60200260200101819052506040518060600160405280610dd984602001516040517e010000001400000000000000000000000000000000000000000000000000006020820152606082811b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602683015290603a016040516020818303038152906040529050919050565b8152604093840151602082015292909201529695505050505050565b610e0d610e06620100006004613e83565b83836121f7565b5050565b60ff54339073ffffffffffffffffffffffffffffffffffffffff168114610e7d576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b50610e8c86868686868661236a565b505050505050565b610e9c611d51565b610ad95f61243b565b606554339073ffffffffffffffffffffffffffffffffffffffff168114610f4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610734565b610a308161243b565b60ff54339073ffffffffffffffffffffffffffffffffffffffff168114610fc3576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b507f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f819003611020576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001811461105a576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf45561108a8585858561246c565b60017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4555050505050565b6110bd611d51565b610ad96124f8565b8360fc54810361116d5760fe5473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330173ffffffffffffffffffffffffffffffffffffffff161415801561112f5750333014155b15611168576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610734565b6111a8565b3330146111a8576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610734565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f819003611204576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001811461123e576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455610100548581036112a2576040517f04a0b7e900000000000000000000000000000000000000000000000000000000815260040161073491815260200190565b506112bd868686866112b8620100006004613e83565b612553565b84867f44eb9a840094a49b3cd0a5205042598a1c08c4e87bafb5760bc2d8efa170c54186866040516112f0929190613fdd565b60405180910390a360017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455505050505050565b61133262010000600d613e83565b339073ffffffffffffffffffffffffffffffffffffffff16811461139b576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b506113a8848484846126a4565b50505050565b6113b661280c565b6113c3618000600f613e83565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611429576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610734565b611437620100006002613e83565b60fb80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905561148461286c565b6114918686868686611b33565b6114a382610a2b620100006004613e83565b610e8c8161243b565b60fc5460fe5473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330173ffffffffffffffffffffffffffffffffffffffff16143390611553576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b5061158d565b6040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610734565b61159b87878787878761236a565b50505050505050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f819003611600576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001811461163a576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455815f03611697576040517f5e85ae7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116a38484843361246c565b60017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf45550505050565b8260fc5481036115595760fe5473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330173ffffffffffffffffffffffffffffffffffffffff1614339061177b576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b506113a88383611cd4565b61178e611d51565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556117f160335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f80611846620100006004613e83565b6040517ffd3f60df00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063fd3f60df90602401602060405180830381865afa1580156118b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118d69190613ff0565b9050806118e557505f92915050565b5f6118f4620100006004613e83565b73ffffffffffffffffffffffffffffffffffffffff16635f3455b5836040518263ffffffff1660e01b815260040161192e91815260200190565b602060405180830381865afa158015611949573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196d9190613ff0565b905060fc54811461198157505f9392505050565b8373ffffffffffffffffffffffffffffffffffffffff166313096a416040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ca573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ee9190614007565b949350505050565b5f80611a06620100006004613e83565b6040517ff5f1516800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192505f9183169063f5f1516890602401602060405180830381865afa158015611a75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a999190614007565b905073ffffffffffffffffffffffffffffffffffffffff811615611abe579392505050565b60fc546040517fc487412c000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff858116602483015283169063c487412c90604401602060405180830381865afa1580156119ca573d5f5f3e3d5ffd5b611b40618000600f613e83565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ba6576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610734565b60ff80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff848116919091179091558316611c23576040517f7138356f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fc949094555060fe80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556101009190915560fd55565b5f5f5f611c88858561296c565b90945092509050848482611cca576040517fe7c8d4cf000000000000000000000000000000000000000000000000000000008152600401610734929190613fdd565b5050509250929050565b5f82815260c9602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917f2632cc0d58b0cb1017b99cc0b6cc66ad86440cc0dd923bfdaa294f95ba1b02019190a35050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610734565b611dda612a2a565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390a1565b5f5f611e7260fc545f8887895f620100006004611e6d9190613e83565b612a96565b905060608380611e98575060ff5473ffffffffffffffffffffffffffffffffffffffff16155b15611eb957611ea78783612c08565b9050611eb281612c1e565b92506120b9565b5f611ec8620100006004613e83565b73ffffffffffffffffffffffffffffffffffffffff166397bb3ce9896040518263ffffffff1660e01b8152600401611f0291815260200190565b602060405180830381865afa158015611f1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f419190614007565b73ffffffffffffffffffffffffffffffffffffffff166313096a416040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f89573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fad9190614007565b90508773ffffffffffffffffffffffffffffffffffffffff8216612000576040517f04a0b7e900000000000000000000000000000000000000000000000000000000815260040161073491815260200190565b505f5f61200c89612ca4565b509150915061201c818484612d03565b60ff546040517fff21c12500000000000000000000000000000000000000000000000000000000815291955073ffffffffffffffffffffffffffffffffffffffff169063ff21c125906120739087906004016139e8565b6020604051808303815f875af115801561208f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120b39190613ff0565b95505050505b868573ffffffffffffffffffffffffffffffffffffffff167f55362fc62473cb1255e770af5d5e02ba6ee5bc7ed6969c30eb11ca31b92384dc60fc5489604051612104929190614022565b60405180910390a35050949350505050565b61215b6040518060a001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020015f81525090565b612163612d10565b5f84845f81811061217657612176613f69565b7fff00000000000000000000000000000000000000000000000000000000000000920135821692505081016121bb576121b3888888888888612d7d565b9150506121ed565b6040517f084a144900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff8416145f8161221c573361222a565b61222a620100006004613e83565b604080514660208083019190915273ffffffffffffffffffffffffffffffffffffffff8416828401526060808301899052835180840390910181526080909201909252805191012090915082806122a357505f81815260ca602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b33906122f4576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610734565b506122ff8185611cd4565b5f81815260ca602052604080822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016339081179091559051879284917f14c1bae9bcc3777747463b66a36584aa75e4ded1aa38089f447beecb125a21759190a4505050505050565b5f61237760fc5486612f45565b90505f6123bc8888888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612fa592505050565b60fc546040517f9c884fd10000000000000000000000000000000000000000000000000000000081529192503091639c884fd1913491612403919087908790600401613f4b565b5f604051808303818588803b15801561241a575f5ffd5b505af115801561242c573d5f5f3e3d5ffd5b50505050505050505050505050565b606580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610a3081612fda565b5f61247684611836565b905073ffffffffffffffffffffffffffffffffffffffff81166124c5576040517f1850b46b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6124d260fc5483612f45565b90505f6124e0858888613050565b90506124ee8282865f611e50565b5050505050505050565b612500612d10565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e253390565b5f84815260c9602052604090205473ffffffffffffffffffffffffffffffffffffffff16801561260a576040517f36ba035500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906336ba03559034906125d7908a908a908a908a9060040161403a565b5f604051808303818588803b1580156125ee575f5ffd5b505af1158015612600573d5f5f3e3d5ffd5b5050505050610e8c565b6126148583611cd4565b6040517f36ba035500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906336ba035590349061266e908a908a908a908a9060040161403a565b5f604051808303818588803b158015612685575f5ffd5b505af1158015612697573d5f5f3e3d5ffd5b5050505050505050505050565b5f83815260c9602052604090205473ffffffffffffffffffffffffffffffffffffffff168381612703576040517ffde974f400000000000000000000000000000000000000000000000000000000815260040161073491815260200190565b508073ffffffffffffffffffffffffffffffffffffffff1663699b0fb934875f8888612730895f5f613050565b6040518763ffffffff1660e01b8152600401612750959493929190614059565b5f6040518083038185885af115801561276b573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526127b191908101906140a4565b50604080518581526020810184905273ffffffffffffffffffffffffffffffffffffffff85169187917f0f87e1ea5eb1f034a6071ef630c174063e3d48756f853efaaf4292b929298240910160405180910390a35050505050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4805460019091558015610a30576040517fdf3a8fdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615612903576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960448201527f616c697a696e67000000000000000000000000000000000000000000000000006064820152608401610734565b5f5460ff90811614610ad9575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611e46565b5f5f5f5f5f365f365f61297f8b8b6130a6565b9550955095509550955095508580156129b857507fffff0000000000000000000000000000000000000000000000000000000000008516155b80156129c45750602183105b80156129d857508015806129d85750601481145b6129e4575f5f5f612a17565b60016129f1846008614119565b6129fd90610100614130565b612a078587614143565b901c612a13838561417f565b60601c5b9850985098505050505050509250925092565b60975460ff16610ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610734565b5f85815260c9602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1680612b47576040517f49b4085300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906349b4085390612b169088908b906004016141e4565b5f604051808303815f87803b158015612b2d575f5ffd5b505af1158015612b3f573d5f5f3e3d5ffd5b505050508290505b5f84612b53575f612b55565b345b90508173ffffffffffffffffffffffffffffffffffffffff1663699b0fb9828c8c8c8c8c6040518763ffffffff1660e01b8152600401612b99959493929190614059565b5f6040518083038185885af1158015612bb4573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612bfa91908101906140a4565b9a9950505050505050505050565b6060612c15468484613230565b90505b92915050565b5f612c2c6180006008613e83565b73ffffffffffffffffffffffffffffffffffffffff166362f84b24836040518263ffffffff1660e01b8152600401612c6491906139e8565b6020604051808303815f875af1158015612c80573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c189190613ff0565b5f5f5f8351606014612ce2576040517fde4c0b9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83806020019051810190612cf69190614205565b9196909550909350915050565b60606119ee84848461326a565b60975460ff1615610ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610734565b612dc26040518060a001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020015f81525090565b5f84845f818110612dd557612dd5613f69565b9050013560f81c60f81b90505f5f612def838a89896132da565b9150915081612dfc61331d565b73ffffffffffffffffffffffffffffffffffffffff1663e52db4ca8c6040518263ffffffff1660e01b8152600401612e3691815260200190565b602060405180830381865afa158015612e51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e759190613ff0565b14158290612eb2576040517f04a0b7e900000000000000000000000000000000000000000000000000000000815260040161073491815260200190565b505f612ec48b8a858d8660018c612a96565b90505f612ed4858c868a87613331565b9050612ee28b85848461354a565b95508a73ffffffffffffffffffffffffffffffffffffffff16818d7fe21913bc89c1320d9709a5d236ffe06b54cf88aecfc9509ebd68f1adba45781e8786604051612f2e929190614022565b60405180910390a450505050509695505050505050565b5f82612f55620100006004613e83565b60408051602081019390935273ffffffffffffffffffffffffffffffffffffffff918216908301528316606082015260800160405160208183030381529060405280519060200120905092915050565b60608585858585604051602001612fc095949392919061423b565b604051602081830303815290604052905095945050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606083838360405160200161308e9392919092835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405160208183030381529060405290509392505050565b60015f3681818160068710156130cc57505f945084935083925082915081905080613226565b7fffff0000000000000000000000000000000000000000000000000000000000008835167e01000000000000000000000000000000000000000000000000000000000000811461312e57505f9550859450849350839250829150819050613226565b60028901357fffff0000000000000000000000000000000000000000000000000000000000001695505f8989600481811061316b5761316b613f69565b919091013560f81c9150506006810160ff1689101561319e57505f96508695508594508493508392508291506132269050565b6131b1600582810160ff16908b8d613eaf565b955095505f8a8a8360050160ff168181106131ce576131ce613f69565b919091013560f81c91505081810160060160ff168a101561320457505f9750879650869550859450849350839250613226915050565b61321e60ff60068484018101821691908501168c8e613eaf565b945094505050505b9295509295509295565b60405160609061308e907f9c884fd100000000000000000000000000000000000000000000000000000000908690869086906020016142be565b6040517f11a2ccc1000000000000000000000000000000000000000000000000000000006020820152606084811b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602484015284821b166038830152604c820183905290606c0161308e565b5f60607fff00000000000000000000000000000000000000000000000000000000000000868116016121bb576133108484613647565b9097909650945050505050565b5f61332c620100006002613e83565b905090565b5f7fff0000000000000000000000000000000000000000000000000000000000000086166134b2576040517f97bb3ce9000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff8516906397bb3ce990602401602060405180830381865afa1580156133c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133e89190614007565b90505f6133f54683612f45565b905080861461344f576040517f1929b7de0000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff83166024820152604401610734565b5f61345985612ca4565b50506040805173ffffffffffffffffffffffffffffffffffffffff808c16602083015286169181019190915260608101829052909150608001604051602081830303815290604052805190602001209350505050610998565b7fff00000000000000000000000000000000000000000000000000000000000000868116016121bb57858585846040516020016134f1939291906142fd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261352d9291602001614331565b604051602081830303815290604052805190602001209050610998565b61358f6040518060a001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020015f81525090565b5f61359b868686610a33565b6040805160a08101909152909150806135d560017fa175e001c0e5684bc26302c2f9a55aec9f3936fe2aef558034003ef4da7fc77e614130565b81526020016135e8620100006003613e83565b73ffffffffffffffffffffffffffffffffffffffff1681526020808201849052604080515f808252928101825292019190613633565b606081526020019060019003908161361e5790505b508152602001939093525090949350505050565b5f60606021831015613685576040517f9b821ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f010000000000000000000000000000000000000000000000000000000000000084845f816136b6576136b6613f69565b9050013560f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613719576040517f084a144900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6137268360018187613eaf565b81019061373391906139fa565b909590945092505050565b5f5f83601f84011261374e575f5ffd5b50813567ffffffffffffffff811115613765575f5ffd5b60208301915083602082850101111561377c575f5ffd5b9250929050565b5f5f5f5f5f60608688031215613797575f5ffd5b85359450602086013567ffffffffffffffff8111156137b4575f5ffd5b6137c08882890161373e565b909550935050604086013567ffffffffffffffff8111156137df575f5ffd5b6137eb8882890161373e565b969995985093965092949392505050565b5f6020828403121561380c575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610a30575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156138a8576138a8613834565b604052919050565b5f67ffffffffffffffff8211156138c9576138c9613834565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112613904575f5ffd5b8135613917613912826138b0565b613861565b81815284602083860101111561392b575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215613959575f5ffd5b833561396481613813565b925060208401359150604084013567ffffffffffffffff811115613986575f5ffd5b613992868287016138f5565b9150509250925092565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f612c15602083018461399c565b5f5f60408385031215613a0b575f5ffd5b82359150602083013567ffffffffffffffff811115613a28575f5ffd5b613a34858286016138f5565b9150509250929050565b5f5f5f5f5f60808688031215613a52575f5ffd5b853594506020860135613a6481613813565b935060408601359250606086013567ffffffffffffffff8111156137df575f5ffd5b602081525f825160606020840152613aa1608084018261399c565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152613adc828261399c565b91505060408401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084830301606085015281815180845260208401915060208160051b8501016020840193505f5b82811015613b7a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868303018452613b6582865161399c565b60209586019594909401939150600101613b2b565b50979650505050505050565b5f5f60408385031215613b97575f5ffd5b823591506020830135613ba981613813565b809150509250929050565b5f5f5f5f5f5f60a08789031215613bc9575f5ffd5b8635613bd481613813565b95506020870135613be481613813565b94506040870135613bf481613813565b935060608701359250608087013567ffffffffffffffff811115613c16575f5ffd5b613c2289828a0161373e565b979a9699509497509295939492505050565b5f5f5f5f60808587031215613c47575f5ffd5b8435613c5281613813565b93506020850135613c6281613813565b9250604085013591506060850135613c7981613813565b939692955090935050565b5f5f5f5f60608587031215613c97575f5ffd5b8435935060208501359250604085013567ffffffffffffffff811115613cbb575f5ffd5b613cc78782880161373e565b95989497509550505050565b5f5f5f5f60808587031215613ce6575f5ffd5b84359350602085013592506040850135613cff81613813565b9396929550929360600135925050565b5f5f5f5f5f5f60c08789031215613d24575f5ffd5b86359550602087013594506040870135613d3d81613813565b93506060870135613d4d81613813565b92506080870135915060a0870135613d6481613813565b809150509295509295509295565b5f5f5f60608486031215613d84575f5ffd5b8335613d8f81613813565b92506020840135613d9f81613813565b929592945050506040919091013590565b5f5f5f60608486031215613dc2575f5ffd5b83359250602084013591506040840135613ddb81613813565b809150509250925092565b5f60208284031215613df6575f5ffd5b8135613e0181613813565b9392505050565b5f5f5f5f5f60a08688031215613e1c575f5ffd5b85359450602086013593506040860135613e3581613813565b92506060860135613e4581613813565b949793965091946080013592915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8181168382160190811115612c1857612c18613e56565b5f5f85851115613ebd575f5ffd5b83861115613ec9575f5ffd5b5050820193919092039150565b80357fffffffff000000000000000000000000000000000000000000000000000000008116906004841015613f35577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b818382375f9101908152919050565b838152826020820152606060408201525f610998606083018461399c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f6119ee602083018486613f96565b5f60208284031215614000575f5ffd5b5051919050565b5f60208284031215614017575f5ffd5b8151613e0181613813565b828152604060208201525f6119ee604083018461399c565b848152836020820152606060408201525f6121ed606083018486613f96565b85815284602082015283604082015273ffffffffffffffffffffffffffffffffffffffff8316606082015260a060808201525f61409960a083018461399c565b979650505050505050565b5f602082840312156140b4575f5ffd5b815167ffffffffffffffff8111156140ca575f5ffd5b8201601f810184136140da575f5ffd5b80516140e8613912826138b0565b8181528560208385010111156140fc575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b8082028115828204841417612c1857612c18613e56565b81810381811115612c1857612c18613e56565b80356020831015612c18577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116906014841015613f35577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808560140360031b1b82161691505092915050565b604081525f6141f6604083018561399c565b90508260208301529392505050565b5f5f5f60608486031215614217575f5ffd5b8351602085015190935061422a81613813565b6040850151909250613ddb81613813565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015273ffffffffffffffffffffffffffffffffffffffff8416604082015282606082015260a060808201525f61409960a083018461399c565b5f81518060208401855e5f93019283525090919050565b7fffffffff00000000000000000000000000000000000000000000000000000000851681528360048201528260248201525f6121ed60448301846142a7565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201525f610998606083018461399c565b7fff00000000000000000000000000000000000000000000000000000000000000831681525f6119ee60018301846142a756fea26469706673582212207e55124f4010042232b0e81dd73ed569bac8c89943d68a9d9765deb70311301964736f6c634300081c0033" ], [ "0x0000000000000000000000000000000000010004", - "0x608060405260043610610290575f3560e01c806379ba509711610165578063c487412c116100c6578063f2d442461161007c578063f5f1516811610062578063f5f151681461074b578063fd3f60df1461076a578063ff7d7f1a14610795575f5ffd5b8063f2d4424614610700578063f2fde38b1461072c575f5ffd5b8063cd0df286116100ac578063cd0df28614610698578063dfc3d230146106b7578063e30c3978146106d6575f5ffd5b8063c487412c14610664578063cb944dec14610683575f5ffd5b806398c35c0b1161011b578063b454149911610101578063b4541499146105ee578063c409b8f91461060d578063c438a9f214610638575f5ffd5b806398c35c0b146105a2578063a7236d16146105cf575f5ffd5b806388c6e7d81161014b57806388c6e7d8146105225780638da5cb5b1461053757806397bb3ce914610561575f5ffd5b806379ba5097146104fa5780638456cb591461050e575f5ffd5b806337d277d41161020f5780635f3455b5116101c5578063699b0fb9116101ab578063699b0fb9146104b45780636e7f096e146104c7578063715018a6146104e6575f5ffd5b80635f3455b51461046857806360d7782914610493575f5ffd5b806349b40853116101f557806349b40853146104085780634cd40a02146104275780635c975abb14610446575f5ffd5b806337d277d4146103a35780633f4ba83a146103f4575f5ffd5b80632149ed74116102645780632f90b1841161024a5780632f90b1841461035057806331b600861461036557806336ba035514610390575f5ffd5b80632149ed741461031c5780632e270c4c14610331575f5ffd5b8062512afa1461029457806307a6d4bc146102bd57806309824a80146102dc57806319a2a285146102fd575b5f5ffd5b34801561029f575f5ffd5b506102aa6101035481565b6040519081526020015b60405180910390f35b3480156102c8575f5ffd5b506102aa6102d73660046142b7565b6107a9565b3480156102e7575f5ffd5b506102fb6102f6366004614317565b6107cf565b005b348015610308575f5ffd5b506102aa610317366004614317565b6107dc565b348015610327575f5ffd5b506102aa60ff5481565b34801561033c575f5ffd5b506102fb61034b366004614317565b6108ab565b34801561035b575f5ffd5b506102aa60fd5481565b348015610370575f5ffd5b506102aa61037f366004614332565b60cf6020525f908152604090205481565b6102fb61039e366004614349565b61097d565b3480156103ae575f5ffd5b5060fb546103cf9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102b4565b3480156103ff575f5ffd5b506102fb610ad0565b348015610413575f5ffd5b506102fb610422366004614398565b610ae2565b348015610432575f5ffd5b506102fb610441366004614317565b610c3b565b348015610451575f5ffd5b5060975460ff1660405190151581526020016102b4565b348015610473575f5ffd5b506102aa610482366004614332565b60ca6020525f908152604090205481565b34801561049e575f5ffd5b506104a7610dee565b6040516102b4919061442c565b6104a76104c236600461443e565b610e7b565b3480156104d2575f5ffd5b506102fb6104e1366004614332565b610f8f565b3480156104f1575f5ffd5b506102fb6110b2565b348015610505575f5ffd5b506102fb6110c3565b348015610519575f5ffd5b506102fb611178565b34801561052d575f5ffd5b506102aa60cd5481565b348015610542575f5ffd5b5060335473ffffffffffffffffffffffffffffffffffffffff166103cf565b34801561056c575f5ffd5b506103cf61057b366004614332565b60cb6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156105ad575f5ffd5b50610100546103cf9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105da575f5ffd5b506104a76105e93660046144ac565b611188565b3480156105f9575f5ffd5b506103cf610608366004614332565b611194565b348015610618575f5ffd5b506102aa610627366004614332565b60ce6020525f908152604090205481565b348015610643575f5ffd5b5060fe546103cf9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561066f575f5ffd5b506103cf61067e3660046144d6565b6111f0565b34801561068e575f5ffd5b506102aa60fc5481565b3480156106a3575f5ffd5b506102fb6106b2366004614514565b6112cf565b3480156106c2575f5ffd5b506102fb6106d13660046145bc565b61147b565b3480156106e1575f5ffd5b5060655473ffffffffffffffffffffffffffffffffffffffff166103cf565b34801561070b575f5ffd5b5060c9546103cf9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610737575f5ffd5b506102fb610746366004614317565b61181f565b348015610756575f5ffd5b506103cf610765366004614317565b6118cf565b348015610775575f5ffd5b506102aa610784366004614317565b60cc6020525f908152604090205481565b3480156107a0575f5ffd5b506104a7611908565b5f6107b48383611916565b5091925050505f8190036107c95760fd545b90505b92915050565b6107d881611a3c565b5050565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260cc6020526040812054806108a15761080f83611a3c565b9150610819611b4b565b6040517faa8facf70000000000000000000000000000000000000000000000000000000081526004810184905246602482015273ffffffffffffffffffffffffffffffffffffffff919091169063aa8facf7906044015f604051808303815f87803b158015610886575f5ffd5b505af1158015610898573d5f5f3e3d5ffd5b505050506108a5565b8091505b50919050565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260cc602052604090205480610907576040517f1850b46b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81815260cf60205260409020548015158061093857508015801561093857505f81815260ce602052604090205482145b1561096f576040517f8420426500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097882611b5f565b505050565b3480156109b6576040517f536ec84b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109be611b95565b339073ffffffffffffffffffffffffffffffffffffffff168114610a2c576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b50610a35611ba4565b5f84815260ca60205260408120548190469003610a6257610a5887878787611c11565b9092509050610a74565b610a6e87878787611ca1565b90925090505b6040805173ffffffffffffffffffffffffffffffffffffffff8416815260208101839052879189917fbc0f4055a7869d8ecad34b33382a0bc181c5811565fec42f335505be5fd661d2910160405180910390a350505050505050565b610ad8611dd8565b610ae0611e59565b565b5f610b2184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611ed792505050565b92505073ffffffffffffffffffffffffffffffffffffffff82169050610b73576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f90815260cc60205260409020548015610bd0576040517ffe919e2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610bda83611f36565b905080610bed57610bea83611a3c565b90505b8381808214610c31576040517f1294e9e100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610a23565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260cc6020526040902054801580610c7857505f81815260ca6020526040902054155b610cae576040517ffe919e2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fe5473ffffffffffffffffffffffffffffffffffffffff16610cfd576040517fb20b58ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fe546040517ff54266a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063f54266a290602401602060405180830381865afa158015610d6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8f919061463e565b905073ffffffffffffffffffffffffffffffffffffffff8116610dde576040517f1850b46b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610de8838261201b565b50505050565b6101018054610dfc90614659565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2890614659565b8015610e735780601f10610e4a57610100808354040283529160200191610e73565b820191905f5260205f20905b815481529060010190602001808311610e5657829003601f168201915b505050505081565b6060858015610eb6576040517f536ec84b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ebe611b95565b339073ffffffffffffffffffffffffffffffffffffffff168114610f27576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610a23565b50610f30611ba4565b5f5f5f610f3e87878b6120a9565b5f8c815260ca602052604090205492955090935091504614610f6f57610f688b8a8a8686866121f4565b9450610f81565b610f7e8b8a8a5f878787612335565b94505b505050509695505050505050565b610f9c618000600f6146d1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611002576040517fcbd9d2e0000000000000000000000000000000000000000000000000000000008152336004820152602401610a23565b60fc545f90815260ca60205260409020819055611022618000600a6146d1565b60fc80545f90815260cb6020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9490941693909317909255549060cc90611089618000600a6146d1565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f205550565b6110ba611dd8565b610ae05f61249e565b606554339073ffffffffffffffffffffffffffffffffffffffff16811461116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610a23565b6111758161249e565b50565b611180611dd8565b610ae06124cf565b60606107c6838361252a565b5f81815260cb602052604081205473ffffffffffffffffffffffffffffffffffffffff16806111c557505f92915050565b5f83815260ca60205260409020544690036111e05792915050565b6111e981612614565b9392505050565b5f5f6111fc848461267c565b90506112c7816040518060200161121290614265565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081815260c95473ffffffffffffffffffffffffffffffffffffffff166020830152808201525f6060820152608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112ac9291602001614714565b604051602081830303815290604052805190602001206126ef565b949350505050565b6112d76126fb565b6112e4618000600f6146d1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461134a576040517fcbd9d2e0000000000000000000000000000000000000000000000000000000008152336004820152602401610a23565b61135261275b565b61136088878786868661147b565b73ffffffffffffffffffffffffffffffffffffffff87166113ad576040517f7138356f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166113fa576040517f7138356f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114038761249e565b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091556040518791907f01fd5911e6d04aec6b21f19752502ad7f3e9876279643c8fa7a4d30c88a29fb2905f90a35050505050505050565b611488618000600f6146d1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114ee576040517fcbd9d2e0000000000000000000000000000000000000000000000000000000008152336004820152602401610a23565b73ffffffffffffffffffffffffffffffffffffffff831661153b576040517f7138356f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fb5473ffffffffffffffffffffffffffffffffffffffff16158061157a575060fb5473ffffffffffffffffffffffffffffffffffffffff8481169116145b60fb54849173ffffffffffffffffffffffffffffffffffffffff909116906115ee576040517f1f73225f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610a23565b505060fd54158061160057508560fd54145b611636576040517fa179f8c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fb805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255833560fc5560fd88905560fe8054928716929091169190911790556116a56060830160408401614317565b61010080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556116f58180614728565b61010191611704919083614801565b506117126020820182614728565b61010291611721919083614801565b50604081013561010355611738618000600a6146d1565b82355f81815260cb6020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff94909416939093179092559060cc9061179c618000600a6146d1565b73ffffffffffffffffffffffffffffffffffffffff16815260208082019290925260409081015f908120939093558435835260ca825290912090830135905584611812576040517f1c25715b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505060ff919091555050565b611827611dd8565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561188a60335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f5f6118dd60fd548461285b565b5f90815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff169392505050565b6101028054610dfc90614659565b5f60608080848403611954576040517f99d8fec900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86865f81811061196757611967614917565b909101357fff000000000000000000000000000000000000000000000000000000000000001691508190506119ae576119a286880188614a2a565b91955093509150611a31565b7fff00000000000000000000000000000000000000000000000000000000000000818116016119ff576119e4866001818a614ab8565b8101906119f19190614adf565b945094509450945050611a33565b6040517f084a144900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92959194509250565b60fe545f9073ffffffffffffffffffffffffffffffffffffffff1615801590611b0b575060fe546040517ff54266a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063f54266a290602401602060405180830381865afa158015611ace573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611af2919061463e565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611b42576040517fa51fa55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107c9826128bb565b5f611b5a62010000600f6146d1565b905090565b60cd80545f90815260ce60209081526040808320859055835485845260cf9092528220819055611b8e90614b77565b9091555050565b5f611b5a6201000060036146d1565b60975460ff1615610ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a23565b5f83815260cb60209081526040808320548151601f8601849004840281018401909252848252839273ffffffffffffffffffffffffffffffffffffffff90911691611c759187908790819084018382808284375f92019190915250612a3592505050565b50919550909350611c8b91508890508784612a61565b611c9786848385612b21565b5094509492505050565b5f83815260cb60209081526040808320548151601f8601849004840281018401909252848252839273ffffffffffffffffffffffffffffffffffffffff909116916060918491611d0a9189908990819084018382808284375f92019190915250612a3592505050565b929850965090935091505073ffffffffffffffffffffffffffffffffffffffff8316611d3e57611d3b888284612b82565b92505b611d49898986612a61565b6040517f8c2a993e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052841690638c2a993e906044015f604051808303815f87803b158015611db6575f5ffd5b505af1158015611dc8573d5f5f3e3d5ffd5b5050505050505094509492505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a23565b611e61612c8b565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390a1565b5f5f5f8351606014611f15576040517fde4c0b9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83806020019051810190611f299190614bae565b9196909550909350915050565b60fe545f9073ffffffffffffffffffffffffffffffffffffffff1680611f5e57505f92915050565b6040517ff54266a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f919083169063f54266a290602401602060405180830381865afa158015611fcb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fef919061463e565b905073ffffffffffffffffffffffffffffffffffffffff811661201557505f9392505050565b6112c784825b5f61202860fd548361285b565b90506120386201000060036146d1565b73ffffffffffffffffffffffffffffffffffffffff16632ed342aa826040518263ffffffff1660e01b815260040161207291815260200190565b5f604051808303815f87803b158015612089575f5ffd5b505af115801561209b573d5f5f3e3d5ffd5b505050506107c98184612cf7565b5f5f5f6120ea86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611ed792505050565b9194509250905073ffffffffffffffffffffffffffffffffffffffff811661213257505f83815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff811661217f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f90815260cc602052604090205480858082146121e8576040517f1294e9e100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610a23565b50505093509350939050565b6060835f0361222f576040517f5e85ae7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61223f60015f84878b8b8b612de5565b5f61224c83886001612fd7565b90505f61225884612614565b905073ffffffffffffffffffffffffffffffffffffffff81166122a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122b4878683898661303a565b92508673ffffffffffffffffffffffffffffffffffffffff16888a7f1cd02155ad1064c60598a8bd0e4e795d7e7d0a0f3c38aad04d261f1297fb2545888a60405161232192919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a450509695505050505050565b606061235660fb5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123ba576040517faa5f618000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123c95f8684878c8c8c612de5565b835f03612402576040517f95b66fe900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61240e83895f612fd7565b905061241d878585888561303a565b91508673ffffffffffffffffffffffffffffffffffffffff16888a7f1cd02155ad1064c60598a8bd0e4e795d7e7d0a0f3c38aad04d261f1297fb2545878960405161248a92919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a450979650505050505050565b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556111758161306f565b6124d7611ba4565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611eac3390565b6060612539618000600a6146d1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361260a575f61010160405160200161257f9190614bef565b60405160208183030381529060405290505f6101026040516020016125a49190614bef565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282526101035460ff16602084015292505f91016040516020818303038152906040529050612600858484846130e5565b93505050506107c9565b6107c68383613158565b5f612622618000600a6146d1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126735750506101005473ffffffffffffffffffffffffffffffffffffffff1690565b6107c982613164565b5f60fd5483146126d35782826040516020016126b892919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001206107c6565b5073ffffffffffffffffffffffffffffffffffffffff16919050565b5f6107c68383306131d2565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4805460019091558015611175576040517fdf3a8fdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff16156127f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960448201527f616c697a696e67000000000000000000000000000000000000000000000000006064820152608401610a23565b5f5460ff90811614610ae0575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611ecd565b5f8261286b6201000060046146d1565b60408051602081019390935273ffffffffffffffffffffffffffffffffffffffff918216908301528316606082015260800160405160208183030381529060405280519060200120905092915050565b5f6128db60fb5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580612916575060fd5446145b60fb5473ffffffffffffffffffffffffffffffffffffffff169061297f576040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610a23565b505f8273ffffffffffffffffffffffffffffffffffffffff163b116129d0576040517f066f53b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f90815260cc602052604090205415612a2c576040517ffe919e2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107c9826131fb565b5f5f5f5f606085806020019051810190612a4f9190614c94565b939a9299509097509550909350915050565b612a6f62010000600f6146d1565b5f83815260ca602090815260408083205460cb909252918290205491517f16e247bf0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481019190915273ffffffffffffffffffffffffffffffffffffffff91821660648201529116906316e247bf906084015b5f604051808303815f87803b158015612b06575f5ffd5b505af1158015612b18573d5f5f3e3d5ffd5b50505050505050565b60fc54848103612b60576040517f04a0b7e9000000000000000000000000000000000000000000000000000000008152600401610a2391815260200190565b50610de873ffffffffffffffffffffffffffffffffffffffff831684836132a4565b5f5f612b8e8484613378565b60fe5491935091505f9073ffffffffffffffffffffffffffffffffffffffff1615612c485760fe546040517ff54266a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169063f54266a290602401602060405180830381865afa158015612c21573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c45919061463e565b90505b73ffffffffffffffffffffffffffffffffffffffff811615612c7557612c708686858461340c565b612c82565b612c828287878787613499565b50509392505050565b60975460ff16610ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a23565b5f82815260cb6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155835260cc825280832085905560fd5485845260ca90925290912055612d6c82611b5f565b612d7a62010000600f6146d1565b73ffffffffffffffffffffffffffffffffffffffff16639f46bad9836040518263ffffffff1660e01b8152600401612db491815260200190565b5f604051808303815f87803b158015612dcb575f5ffd5b505af1158015612ddd573d5f5f3e3d5ffd5b505050505050565b60fc548203612eb4578334818114612e32576040517f626ade3000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610a23565b50508615612ea457612e47618000600a6146d1565b73ffffffffffffffffffffffffffffffffffffffff166323c2ec09346040518263ffffffff1660e01b81526004015f604051808303818588803b158015612e8c575f5ffd5b505af1158015612e9e573d5f5f3e3d5ffd5b50505050505b612eaf838386613534565b612b18565b3415612eec576040517f536ec84b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8615612f80576040517f74f4f54700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018690528616906374f4f547906044015f604051808303815f87803b158015612f5f575f5ffd5b505af1158015612f71573d5f5f3e3d5ffd5b50505050612eaf838386613534565b612f8b838386613534565b85612b18575f612f9c8287876135b5565b9050808514610c31576040517f23830e2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260ca6020526040902054606090821561302757805f03613027576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130318582611188565b95945050505050565b60608585858585604051602001613055959493929190614d4c565b604051602081830303815290604052905095945050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6060600160f81b858585856040516020016131039493929190614db8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261313f9291602001614df6565b6040516020818303038152906040529050949350505050565b60606107c6838361370d565b5f8173ffffffffffffffffffffffffffffffffffffffff166313096a416040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c9919061463e565b5f604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b5f613206468361285b565b9050613213818346613acd565b61321b611b95565b6040517f548a5a3300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152306024830152919091169063548a5a33906044015f604051808303815f87803b158015613289575f5ffd5b505af115801561329b573d5f5f3e3d5ffd5b50505050919050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109789084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba4565b6040517f07a6d4bc0000000000000000000000000000000000000000000000000000000081525f90819030906307a6d4bc906133b890869060040161442c565b602060405180830381865afa1580156133d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133f79190614e29565b905061340381856111f0565b91509250929050565b61341960fd548585613cb1565b828173ffffffffffffffffffffffffffffffffffffffff8181169083161461348d576040517f1f73225f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610a23565b5050610de88483612cf7565b6134a4858585613cb1565b5f6134b186868686613d01565b9050818173ffffffffffffffffffffffffffffffffffffffff80821690831614613527576040517f1f73225f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610a23565b5050612ddd858388613acd565b61354262010000600f6146d1565b5f83815260ca6020526040908190205490517fb0e6f1b00000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604481019190915273ffffffffffffffffffffffffffffffffffffffff919091169063b0e6f1b090606401612aef565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa158015613621573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136459190614e29565b905061366973ffffffffffffffffffffffffffffffffffffffff8516863086613de4565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401602060405180830381865afa1580156136d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136f79190614e29565b90506137038282614e40565b9695505050505050565b60608080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff871601613846576040516020016137909060208082526005908201527f4574686572000000000000000000000000000000000000000000000000000000604082015260600190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282526020838101526003918301919091527f455448000000000000000000000000000000000000000000000000000000000060608301529350608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252601260208401529350016040516020818303038152906040529050613ac1565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde030000000000000000000000000000000000000000000000000000000017905290515f9173ffffffffffffffffffffffffffffffffffffffff8916916138c29190614e53565b5f60405180830381855afa9150503d805f81146138fa576040519150601f19603f3d011682016040523d82523d5f602084013e6138ff565b606091505b50945090508061391b5760405180602001604052805f81525093505b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b4100000000000000000000000000000000000000000000000000000000179052905173ffffffffffffffffffffffffffffffffffffffff89169161399491614e53565b5f60405180830381855afa9150503d805f81146139cc576040519150601f19603f3d011682016040523d82523d5f602084013e6139d1565b606091505b5093509050806139ed5760405180602001604052805f81525092505b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce56700000000000000000000000000000000000000000000000000000000179052905173ffffffffffffffffffffffffffffffffffffffff891691613a6691614e53565b5f60405180830381855afa9150503d805f8114613a9e576040519150601f19603f3d011682016040523d82523d5f602084013e613aa3565b606091505b509250905080613abf5760405180602001604052805f81525091505b505b613703858484846130e5565b5f83815260cb6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716908117909155835260cc825280832086905585835260ca9091529020819055613b4083611b5f565b613b48611b4b565b6040517faa8facf7000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff919091169063aa8facf790604401612aef565b5f613c05826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613e429092919063ffffffff16565b905080515f1480613c25575080806020019051810190613c259190614e5e565b610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a23565b5f613cbc848361285b565b9050808314610de8576040517f1294e9e10000000000000000000000000000000000000000000000000000000081526004810182905260248101849052604401610a23565b5f468503613d3b576040517f138ee1a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613d46868561267c565b90505f613d538288613e50565b6040517f9a6ab87000000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff821690639a6ab87090613dac90899089908990600401614e7d565b5f604051808303815f87803b158015613dc3575f5ffd5b505af1158015613dd5573d5f5f3e3d5ffd5b50929998505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610de89085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016132f6565b60606112c784845f85613f15565b5f5f6112c75f8560405180602001613e6790614265565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081815260c95473ffffffffffffffffffffffffffffffffffffffff166020830152808201525f6060820152608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052613f019291602001614714565b60405160208183030381529060405261402a565b606082471015613fa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610a23565b5f5f8673ffffffffffffffffffffffffffffffffffffffff168587604051613fcf9190614e53565b5f6040518083038185875af1925050503d805f8114614009576040519150601f19603f3d011682016040523d82523d5f602084013e61400e565b606091505b509150915061401f87838387614187565b979650505050505050565b5f83471015614095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610a23565b81515f036140ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610a23565b8282516020840186f5905073ffffffffffffffffffffffffffffffffffffffff81166111e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610a23565b6060831561421c5782515f036142155773ffffffffffffffffffffffffffffffffffffffff85163b614215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a23565b50816112c7565b6112c783838151156142315781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a23919061442c565b6106ae80614eb283390190565b5f5f83601f840112614282575f5ffd5b50813567ffffffffffffffff811115614299575f5ffd5b6020830191508360208285010111156142b0575f5ffd5b9250929050565b5f5f602083850312156142c8575f5ffd5b823567ffffffffffffffff8111156142de575f5ffd5b6142ea85828601614272565b90969095509350505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611175575f5ffd5b5f60208284031215614327575f5ffd5b81356111e9816142f6565b5f60208284031215614342575f5ffd5b5035919050565b5f5f5f5f6060858703121561435c575f5ffd5b8435935060208501359250604085013567ffffffffffffffff811115614380575f5ffd5b61438c87828801614272565b95989497509550505050565b5f5f5f604084860312156143aa575f5ffd5b833567ffffffffffffffff8111156143c0575f5ffd5b6143cc86828701614272565b909790965060209590950135949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6107c660208301846143e0565b5f5f5f5f5f5f60a08789031215614453575f5ffd5b8635955060208701359450604087013593506060870135614473816142f6565b9250608087013567ffffffffffffffff81111561448e575f5ffd5b61449a89828a01614272565b979a9699509497509295939492505050565b5f5f604083850312156144bd575f5ffd5b82356144c8816142f6565b946020939093013593505050565b5f5f604083850312156144e7575f5ffd5b8235915060208301356144f9816142f6565b809150509250929050565b5f606082840312156108a5575f5ffd5b5f5f5f5f5f5f5f5f610140898b03121561452c575f5ffd5b88359750602089013561453e816142f6565b9650604089013595506060890135614555816142f6565b94506080890135614565816142f6565b935060a0890135614575816142f6565b92506145848a60c08b01614504565b915061012089013567ffffffffffffffff8111156145a0575f5ffd5b6145ac8b828c01614504565b9150509295985092959890939650565b5f5f5f5f5f5f61010087890312156145d2575f5ffd5b863595506020870135945060408701356145eb816142f6565b935060608701356145fb816142f6565b925061460a8860808901614504565b915060e087013567ffffffffffffffff811115614625575f5ffd5b61463189828a01614504565b9150509295509295509295565b5f6020828403121561464e575f5ffd5b81516111e9816142f6565b600181811c9082168061466d57607f821691505b6020821081036108a5577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff81811683821601908111156107c9576107c96146a4565b5f81518060208401855e5f93019283525090919050565b5f6112c761472283866146fd565b846146fd565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261475b575f5ffd5b83018035915067ffffffffffffffff821115614775575f5ffd5b6020019150368190038213156142b0575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f82111561097857805f5260205f20601f840160051c810160208510156147db5750805b601f840160051c820191505b818110156147fa575f81556001016147e7565b5050505050565b67ffffffffffffffff83111561481957614819614789565b61482d836148278354614659565b836147b6565b5f601f84116001811461487d575f85156148475750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556147fa565b5f838152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08716915b828110156148ca57868501358255602094850194600190920191016148aa565b5086821015614905577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561498b5761498b614789565b604052919050565b5f67ffffffffffffffff8211156149ac576149ac614789565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126149e7575f5ffd5b81356149fa6149f582614993565b614944565b818152846020838601011115614a0e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215614a3c575f5ffd5b833567ffffffffffffffff811115614a52575f5ffd5b614a5e868287016149d8565b935050602084013567ffffffffffffffff811115614a7a575f5ffd5b614a86868287016149d8565b925050604084013567ffffffffffffffff811115614aa2575f5ffd5b614aae868287016149d8565b9150509250925092565b5f5f85851115614ac6575f5ffd5b83861115614ad2575f5ffd5b5050820193919092039150565b5f5f5f5f60808587031215614af2575f5ffd5b84359350602085013567ffffffffffffffff811115614b0f575f5ffd5b614b1b878288016149d8565b935050604085013567ffffffffffffffff811115614b37575f5ffd5b614b43878288016149d8565b925050606085013567ffffffffffffffff811115614b5f575f5ffd5b614b6b878288016149d8565b91505092959194509250565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ba757614ba76146a4565b5060010190565b5f5f5f60608486031215614bc0575f5ffd5b83516020850151909350614bd3816142f6565b6040850151909250614be4816142f6565b809150509250925092565b602081525f5f8354614c0081614659565b806020860152600182165f8114614c1e5760018114614c5857614c89565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166040870152604082151560051b8701019350614c89565b865f5260205f205f5b83811015614c8057815488820160400152600190910190602001614c61565b87016040019450505b509195945050505050565b5f5f5f5f5f60a08688031215614ca8575f5ffd5b8551614cb3816142f6565b6020870151909550614cc4816142f6565b6040870151909450614cd5816142f6565b60608701516080880151919450925067ffffffffffffffff811115614cf8575f5ffd5b8601601f81018813614d08575f5ffd5b8051614d166149f582614993565b818152896020838501011115614d2a575f5ffd5b8160208401602083015e5f602083830101528093505050509295509295909350565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015273ffffffffffffffffffffffffffffffffffffffff8416604082015282606082015260a060808201525f61401f60a08301846143e0565b848152608060208201525f614dd060808301866143e0565b8281036040840152614de281866143e0565b9050828103606084015261401f81856143e0565b7fff00000000000000000000000000000000000000000000000000000000000000831681525f6112c760018301846146fd565b5f60208284031215614e39575f5ffd5b5051919050565b818103818111156107c9576107c96146a4565b5f6107c682846146fd565b5f60208284031215614e6e575f5ffd5b815180151581146111e9575f5ffd5b83815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201525f61303160608301846143e056fe60806040526040516106ae3803806106ae833981016040819052610022916103ed565b61002d82825f610034565b5050610513565b61003d836100f1565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a25f8251118061007c5750805b156100ec576100ea836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906104af565b83610273565b505b505050565b6001600160a01b0381163b61015b5760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101cd816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101be91906104af565b6001600160a01b03163b151590565b6102325760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610152565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061029883836040518060600160405280602781526020016106876027913961029f565b9392505050565b60605f5f856001600160a01b0316856040516102bb91906104c8565b5f60405180830381855af49150503d805f81146102f3576040519150601f19603f3d011682016040523d82523d5f602084013e6102f8565b606091505b50909250905061030a86838387610314565b9695505050505050565b606083156103825782515f0361037b576001600160a01b0385163b61037b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610152565b508161038c565b61038c8383610394565b949350505050565b8151156103a45781518083602001fd5b8060405162461bcd60e51b815260040161015291906104de565b80516001600160a01b03811681146103d4575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156103fe575f5ffd5b610407836103be565b60208401519092506001600160401b03811115610422575f5ffd5b8301601f81018513610432575f5ffd5b80516001600160401b0381111561044b5761044b6103d9565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610479576104796103d9565b604052818152828201602001871015610490575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f602082840312156104bf575f5ffd5b610298826103be565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b610167806105205f395ff3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b6100d9565b565b5f6100687fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d505473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100d491906100f7565b905090565b365f5f375f5f365f845af43d5f5f3e8080156100f3573d5ff35b3d5ffd5b5f60208284031215610107575f5ffd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461012a575f5ffd5b939250505056fea264697066735822122080ece73ad85a7ea1093cd2206f92e0299e6b25c793a68823375b18dd7b0b7d5e64736f6c634300081c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220f4b97ff494ddacb8d574a9b6df5b4eb69861fe8860b01b761535a8394340ab1364736f6c634300081c0033" + "0x608060405260043610610290575f3560e01c806379ba509711610165578063c487412c116100c6578063f2d442461161007c578063f5f1516811610062578063f5f151681461074b578063fd3f60df1461076a578063ff7d7f1a14610795575f5ffd5b8063f2d4424614610700578063f2fde38b1461072c575f5ffd5b8063cd0df286116100ac578063cd0df28614610698578063dfc3d230146106b7578063e30c3978146106d6575f5ffd5b8063c487412c14610664578063cb944dec14610683575f5ffd5b806398c35c0b1161011b578063b454149911610101578063b4541499146105ee578063c409b8f91461060d578063c438a9f214610638575f5ffd5b806398c35c0b146105a2578063a7236d16146105cf575f5ffd5b806388c6e7d81161014b57806388c6e7d8146105225780638da5cb5b1461053757806397bb3ce914610561575f5ffd5b806379ba5097146104fa5780638456cb591461050e575f5ffd5b806337d277d41161020f5780635f3455b5116101c5578063699b0fb9116101ab578063699b0fb9146104b45780636e7f096e146104c7578063715018a6146104e6575f5ffd5b80635f3455b51461046857806360d7782914610493575f5ffd5b806349b40853116101f557806349b40853146104085780634cd40a02146104275780635c975abb14610446575f5ffd5b806337d277d4146103a35780633f4ba83a146103f4575f5ffd5b80632149ed74116102645780632f90b1841161024a5780632f90b1841461035057806331b600861461036557806336ba035514610390575f5ffd5b80632149ed741461031c5780632e270c4c14610331575f5ffd5b8062512afa1461029457806307a6d4bc146102bd57806309824a80146102dc57806319a2a285146102fd575b5f5ffd5b34801561029f575f5ffd5b506102aa6101035481565b6040519081526020015b60405180910390f35b3480156102c8575f5ffd5b506102aa6102d73660046142b7565b6107a9565b3480156102e7575f5ffd5b506102fb6102f6366004614317565b6107cf565b005b348015610308575f5ffd5b506102aa610317366004614317565b6107dc565b348015610327575f5ffd5b506102aa60ff5481565b34801561033c575f5ffd5b506102fb61034b366004614317565b6108ab565b34801561035b575f5ffd5b506102aa60fd5481565b348015610370575f5ffd5b506102aa61037f366004614332565b60cf6020525f908152604090205481565b6102fb61039e366004614349565b61097d565b3480156103ae575f5ffd5b5060fb546103cf9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102b4565b3480156103ff575f5ffd5b506102fb610ad0565b348015610413575f5ffd5b506102fb610422366004614398565b610ae2565b348015610432575f5ffd5b506102fb610441366004614317565b610c3b565b348015610451575f5ffd5b5060975460ff1660405190151581526020016102b4565b348015610473575f5ffd5b506102aa610482366004614332565b60ca6020525f908152604090205481565b34801561049e575f5ffd5b506104a7610dee565b6040516102b4919061442c565b6104a76104c236600461443e565b610e7b565b3480156104d2575f5ffd5b506102fb6104e1366004614332565b610f8f565b3480156104f1575f5ffd5b506102fb6110b2565b348015610505575f5ffd5b506102fb6110c3565b348015610519575f5ffd5b506102fb611178565b34801561052d575f5ffd5b506102aa60cd5481565b348015610542575f5ffd5b5060335473ffffffffffffffffffffffffffffffffffffffff166103cf565b34801561056c575f5ffd5b506103cf61057b366004614332565b60cb6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156105ad575f5ffd5b50610100546103cf9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105da575f5ffd5b506104a76105e93660046144ac565b611188565b3480156105f9575f5ffd5b506103cf610608366004614332565b611194565b348015610618575f5ffd5b506102aa610627366004614332565b60ce6020525f908152604090205481565b348015610643575f5ffd5b5060fe546103cf9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561066f575f5ffd5b506103cf61067e3660046144d6565b6111f0565b34801561068e575f5ffd5b506102aa60fc5481565b3480156106a3575f5ffd5b506102fb6106b2366004614514565b6112cf565b3480156106c2575f5ffd5b506102fb6106d13660046145bc565b61147b565b3480156106e1575f5ffd5b5060655473ffffffffffffffffffffffffffffffffffffffff166103cf565b34801561070b575f5ffd5b5060c9546103cf9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610737575f5ffd5b506102fb610746366004614317565b61181f565b348015610756575f5ffd5b506103cf610765366004614317565b6118cf565b348015610775575f5ffd5b506102aa610784366004614317565b60cc6020525f908152604090205481565b3480156107a0575f5ffd5b506104a7611908565b5f6107b48383611916565b5091925050505f8190036107c95760fd545b90505b92915050565b6107d881611a3c565b5050565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260cc6020526040812054806108a15761080f83611a3c565b9150610819611b4b565b6040517faa8facf70000000000000000000000000000000000000000000000000000000081526004810184905246602482015273ffffffffffffffffffffffffffffffffffffffff919091169063aa8facf7906044015f604051808303815f87803b158015610886575f5ffd5b505af1158015610898573d5f5f3e3d5ffd5b505050506108a5565b8091505b50919050565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260cc602052604090205480610907576040517f1850b46b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81815260cf60205260409020548015158061093857508015801561093857505f81815260ce602052604090205482145b1561096f576040517f8420426500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097882611b5f565b505050565b3480156109b6576040517f536ec84b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109be611b95565b339073ffffffffffffffffffffffffffffffffffffffff168114610a2c576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b50610a35611ba4565b5f84815260ca60205260408120548190469003610a6257610a5887878787611c11565b9092509050610a74565b610a6e87878787611ca1565b90925090505b6040805173ffffffffffffffffffffffffffffffffffffffff8416815260208101839052879189917fbc0f4055a7869d8ecad34b33382a0bc181c5811565fec42f335505be5fd661d2910160405180910390a350505050505050565b610ad8611dd8565b610ae0611e59565b565b5f610b2184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611ed792505050565b92505073ffffffffffffffffffffffffffffffffffffffff82169050610b73576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f90815260cc60205260409020548015610bd0576040517ffe919e2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610bda83611f36565b905080610bed57610bea83611a3c565b90505b8381808214610c31576040517f1294e9e100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610a23565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260cc6020526040902054801580610c7857505f81815260ca6020526040902054155b610cae576040517ffe919e2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fe5473ffffffffffffffffffffffffffffffffffffffff16610cfd576040517fb20b58ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fe546040517ff54266a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063f54266a290602401602060405180830381865afa158015610d6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8f919061463e565b905073ffffffffffffffffffffffffffffffffffffffff8116610dde576040517f1850b46b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610de8838261201b565b50505050565b6101018054610dfc90614659565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2890614659565b8015610e735780601f10610e4a57610100808354040283529160200191610e73565b820191905f5260205f20905b815481529060010190602001808311610e5657829003601f168201915b505050505081565b6060858015610eb6576040517f536ec84b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ebe611b95565b339073ffffffffffffffffffffffffffffffffffffffff168114610f27576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610a23565b50610f30611ba4565b5f5f5f610f3e87878b6120a9565b5f8c815260ca602052604090205492955090935091504614610f6f57610f688b8a8a8686866121f4565b9450610f81565b610f7e8b8a8a5f878787612335565b94505b505050509695505050505050565b610f9c618000600f6146d1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611002576040517fcbd9d2e0000000000000000000000000000000000000000000000000000000008152336004820152602401610a23565b60fc545f90815260ca60205260409020819055611022618000600a6146d1565b60fc80545f90815260cb6020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9490941693909317909255549060cc90611089618000600a6146d1565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f205550565b6110ba611dd8565b610ae05f61249e565b606554339073ffffffffffffffffffffffffffffffffffffffff16811461116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610a23565b6111758161249e565b50565b611180611dd8565b610ae06124cf565b60606107c6838361252a565b5f81815260cb602052604081205473ffffffffffffffffffffffffffffffffffffffff16806111c557505f92915050565b5f83815260ca60205260409020544690036111e05792915050565b6111e981612614565b9392505050565b5f5f6111fc848461267c565b90506112c7816040518060200161121290614265565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081815260c95473ffffffffffffffffffffffffffffffffffffffff166020830152808201525f6060820152608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112ac9291602001614714565b604051602081830303815290604052805190602001206126ef565b949350505050565b6112d76126fb565b6112e4618000600f6146d1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461134a576040517fcbd9d2e0000000000000000000000000000000000000000000000000000000008152336004820152602401610a23565b61135261275b565b61136088878786868661147b565b73ffffffffffffffffffffffffffffffffffffffff87166113ad576040517f7138356f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166113fa576040517f7138356f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114038761249e565b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091556040518791907f01fd5911e6d04aec6b21f19752502ad7f3e9876279643c8fa7a4d30c88a29fb2905f90a35050505050505050565b611488618000600f6146d1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114ee576040517fcbd9d2e0000000000000000000000000000000000000000000000000000000008152336004820152602401610a23565b73ffffffffffffffffffffffffffffffffffffffff831661153b576040517f7138356f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fb5473ffffffffffffffffffffffffffffffffffffffff16158061157a575060fb5473ffffffffffffffffffffffffffffffffffffffff8481169116145b60fb54849173ffffffffffffffffffffffffffffffffffffffff909116906115ee576040517f1f73225f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610a23565b505060fd54158061160057508560fd54145b611636576040517fa179f8c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fb805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255833560fc5560fd88905560fe8054928716929091169190911790556116a56060830160408401614317565b61010080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556116f58180614728565b61010191611704919083614801565b506117126020820182614728565b61010291611721919083614801565b50604081013561010355611738618000600a6146d1565b82355f81815260cb6020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff94909416939093179092559060cc9061179c618000600a6146d1565b73ffffffffffffffffffffffffffffffffffffffff16815260208082019290925260409081015f908120939093558435835260ca825290912090830135905584611812576040517f1c25715b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505060ff919091555050565b611827611dd8565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561188a60335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f5f6118dd60fd548461285b565b5f90815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff169392505050565b6101028054610dfc90614659565b5f60608080848403611954576040517f99d8fec900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86865f81811061196757611967614917565b909101357fff000000000000000000000000000000000000000000000000000000000000001691508190506119ae576119a286880188614a2a565b91955093509150611a31565b7fff00000000000000000000000000000000000000000000000000000000000000818116016119ff576119e4866001818a614ab8565b8101906119f19190614adf565b945094509450945050611a33565b6040517f084a144900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92959194509250565b60fe545f9073ffffffffffffffffffffffffffffffffffffffff1615801590611b0b575060fe546040517ff54266a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063f54266a290602401602060405180830381865afa158015611ace573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611af2919061463e565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611b42576040517fa51fa55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107c9826128bb565b5f611b5a62010000600f6146d1565b905090565b60cd80545f90815260ce60209081526040808320859055835485845260cf9092528220819055611b8e90614b77565b9091555050565b5f611b5a6201000060036146d1565b60975460ff1615610ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a23565b5f83815260cb60209081526040808320548151601f8601849004840281018401909252848252839273ffffffffffffffffffffffffffffffffffffffff90911691611c759187908790819084018382808284375f92019190915250612a3592505050565b50919550909350611c8b91508890508784612a61565b611c9786848385612b21565b5094509492505050565b5f83815260cb60209081526040808320548151601f8601849004840281018401909252848252839273ffffffffffffffffffffffffffffffffffffffff909116916060918491611d0a9189908990819084018382808284375f92019190915250612a3592505050565b929850965090935091505073ffffffffffffffffffffffffffffffffffffffff8316611d3e57611d3b888284612b82565b92505b611d49898986612a61565b6040517f8c2a993e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052841690638c2a993e906044015f604051808303815f87803b158015611db6575f5ffd5b505af1158015611dc8573d5f5f3e3d5ffd5b5050505050505094509492505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a23565b611e61612c8b565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390a1565b5f5f5f8351606014611f15576040517fde4c0b9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83806020019051810190611f299190614bae565b9196909550909350915050565b60fe545f9073ffffffffffffffffffffffffffffffffffffffff1680611f5e57505f92915050565b6040517ff54266a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f919083169063f54266a290602401602060405180830381865afa158015611fcb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fef919061463e565b905073ffffffffffffffffffffffffffffffffffffffff811661201557505f9392505050565b6112c784825b5f61202860fd548361285b565b90506120386201000060036146d1565b73ffffffffffffffffffffffffffffffffffffffff16632ed342aa826040518263ffffffff1660e01b815260040161207291815260200190565b5f604051808303815f87803b158015612089575f5ffd5b505af115801561209b573d5f5f3e3d5ffd5b505050506107c98184612cf7565b5f5f5f6120ea86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611ed792505050565b9194509250905073ffffffffffffffffffffffffffffffffffffffff811661213257505f83815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff811661217f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f90815260cc602052604090205480858082146121e8576040517f1294e9e100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610a23565b50505093509350939050565b6060835f0361222f576040517f5e85ae7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61223f60015f84878b8b8b612de5565b5f61224c83886001612fd7565b90505f61225884612614565b905073ffffffffffffffffffffffffffffffffffffffff81166122a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122b4878683898661303a565b92508673ffffffffffffffffffffffffffffffffffffffff16888a7f1cd02155ad1064c60598a8bd0e4e795d7e7d0a0f3c38aad04d261f1297fb2545888a60405161232192919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a450509695505050505050565b606061235660fb5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123ba576040517faa5f618000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123c95f8684878c8c8c612de5565b835f03612402576040517f95b66fe900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61240e83895f612fd7565b905061241d878585888561303a565b91508673ffffffffffffffffffffffffffffffffffffffff16888a7f1cd02155ad1064c60598a8bd0e4e795d7e7d0a0f3c38aad04d261f1297fb2545878960405161248a92919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a450979650505050505050565b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556111758161306f565b6124d7611ba4565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611eac3390565b6060612539618000600a6146d1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361260a575f61010160405160200161257f9190614bef565b60405160208183030381529060405290505f6101026040516020016125a49190614bef565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282526101035460ff16602084015292505f91016040516020818303038152906040529050612600858484846130e5565b93505050506107c9565b6107c68383613158565b5f612622618000600a6146d1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126735750506101005473ffffffffffffffffffffffffffffffffffffffff1690565b6107c982613164565b5f60fd5483146126d35782826040516020016126b892919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001206107c6565b5073ffffffffffffffffffffffffffffffffffffffff16919050565b5f6107c68383306131d2565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4805460019091558015611175576040517fdf3a8fdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff16156127f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960448201527f616c697a696e67000000000000000000000000000000000000000000000000006064820152608401610a23565b5f5460ff90811614610ae0575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611ecd565b5f8261286b6201000060046146d1565b60408051602081019390935273ffffffffffffffffffffffffffffffffffffffff918216908301528316606082015260800160405160208183030381529060405280519060200120905092915050565b5f6128db60fb5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580612916575060fd5446145b60fb5473ffffffffffffffffffffffffffffffffffffffff169061297f576040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610a23565b505f8273ffffffffffffffffffffffffffffffffffffffff163b116129d0576040517f066f53b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f90815260cc602052604090205415612a2c576040517ffe919e2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107c9826131fb565b5f5f5f5f606085806020019051810190612a4f9190614c94565b939a9299509097509550909350915050565b612a6f62010000600f6146d1565b5f83815260ca602090815260408083205460cb909252918290205491517f16e247bf0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481019190915273ffffffffffffffffffffffffffffffffffffffff91821660648201529116906316e247bf906084015b5f604051808303815f87803b158015612b06575f5ffd5b505af1158015612b18573d5f5f3e3d5ffd5b50505050505050565b60fc54848103612b60576040517f04a0b7e9000000000000000000000000000000000000000000000000000000008152600401610a2391815260200190565b50610de873ffffffffffffffffffffffffffffffffffffffff831684836132a4565b5f5f612b8e8484613378565b60fe5491935091505f9073ffffffffffffffffffffffffffffffffffffffff1615612c485760fe546040517ff54266a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169063f54266a290602401602060405180830381865afa158015612c21573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c45919061463e565b90505b73ffffffffffffffffffffffffffffffffffffffff811615612c7557612c708686858461340c565b612c82565b612c828287878787613499565b50509392505050565b60975460ff16610ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a23565b5f82815260cb6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155835260cc825280832085905560fd5485845260ca90925290912055612d6c82611b5f565b612d7a62010000600f6146d1565b73ffffffffffffffffffffffffffffffffffffffff16639f46bad9836040518263ffffffff1660e01b8152600401612db491815260200190565b5f604051808303815f87803b158015612dcb575f5ffd5b505af1158015612ddd573d5f5f3e3d5ffd5b505050505050565b60fc548203612eb4578334818114612e32576040517f626ade3000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610a23565b50508615612ea457612e47618000600a6146d1565b73ffffffffffffffffffffffffffffffffffffffff166323c2ec09346040518263ffffffff1660e01b81526004015f604051808303818588803b158015612e8c575f5ffd5b505af1158015612e9e573d5f5f3e3d5ffd5b50505050505b612eaf838386613534565b612b18565b3415612eec576040517f536ec84b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8615612f80576040517f74f4f54700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018690528616906374f4f547906044015f604051808303815f87803b158015612f5f575f5ffd5b505af1158015612f71573d5f5f3e3d5ffd5b50505050612eaf838386613534565b612f8b838386613534565b85612b18575f612f9c8287876135b5565b9050808514610c31576040517f23830e2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260ca6020526040902054606090821561302757805f03613027576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130318582611188565b95945050505050565b60608585858585604051602001613055959493929190614d4c565b604051602081830303815290604052905095945050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6060600160f81b858585856040516020016131039493929190614db8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261313f9291602001614df6565b6040516020818303038152906040529050949350505050565b60606107c6838361370d565b5f8173ffffffffffffffffffffffffffffffffffffffff166313096a416040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c9919061463e565b5f604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b5f613206468361285b565b9050613213818346613acd565b61321b611b95565b6040517f548a5a3300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152306024830152919091169063548a5a33906044015f604051808303815f87803b158015613289575f5ffd5b505af115801561329b573d5f5f3e3d5ffd5b50505050919050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109789084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba4565b6040517f07a6d4bc0000000000000000000000000000000000000000000000000000000081525f90819030906307a6d4bc906133b890869060040161442c565b602060405180830381865afa1580156133d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133f79190614e29565b905061340381856111f0565b91509250929050565b61341960fd548585613cb1565b828173ffffffffffffffffffffffffffffffffffffffff8181169083161461348d576040517f1f73225f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610a23565b5050610de88483612cf7565b6134a4858585613cb1565b5f6134b186868686613d01565b9050818173ffffffffffffffffffffffffffffffffffffffff80821690831614613527576040517f1f73225f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610a23565b5050612ddd858388613acd565b61354262010000600f6146d1565b5f83815260ca6020526040908190205490517fb0e6f1b00000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604481019190915273ffffffffffffffffffffffffffffffffffffffff919091169063b0e6f1b090606401612aef565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa158015613621573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136459190614e29565b905061366973ffffffffffffffffffffffffffffffffffffffff8516863086613de4565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401602060405180830381865afa1580156136d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136f79190614e29565b90506137038282614e40565b9695505050505050565b60608080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff871601613846576040516020016137909060208082526005908201527f4574686572000000000000000000000000000000000000000000000000000000604082015260600190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282526020838101526003918301919091527f455448000000000000000000000000000000000000000000000000000000000060608301529350608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252601260208401529350016040516020818303038152906040529050613ac1565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde030000000000000000000000000000000000000000000000000000000017905290515f9173ffffffffffffffffffffffffffffffffffffffff8916916138c29190614e53565b5f60405180830381855afa9150503d805f81146138fa576040519150601f19603f3d011682016040523d82523d5f602084013e6138ff565b606091505b50945090508061391b5760405180602001604052805f81525093505b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b4100000000000000000000000000000000000000000000000000000000179052905173ffffffffffffffffffffffffffffffffffffffff89169161399491614e53565b5f60405180830381855afa9150503d805f81146139cc576040519150601f19603f3d011682016040523d82523d5f602084013e6139d1565b606091505b5093509050806139ed5760405180602001604052805f81525092505b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce56700000000000000000000000000000000000000000000000000000000179052905173ffffffffffffffffffffffffffffffffffffffff891691613a6691614e53565b5f60405180830381855afa9150503d805f8114613a9e576040519150601f19603f3d011682016040523d82523d5f602084013e613aa3565b606091505b509250905080613abf5760405180602001604052805f81525091505b505b613703858484846130e5565b5f83815260cb6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716908117909155835260cc825280832086905585835260ca9091529020819055613b4083611b5f565b613b48611b4b565b6040517faa8facf7000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff919091169063aa8facf790604401612aef565b5f613c05826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613e429092919063ffffffff16565b905080515f1480613c25575080806020019051810190613c259190614e5e565b610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a23565b5f613cbc848361285b565b9050808314610de8576040517f1294e9e10000000000000000000000000000000000000000000000000000000081526004810182905260248101849052604401610a23565b5f468503613d3b576040517f138ee1a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613d46868561267c565b90505f613d538288613e50565b6040517f9a6ab87000000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff821690639a6ab87090613dac90899089908990600401614e7d565b5f604051808303815f87803b158015613dc3575f5ffd5b505af1158015613dd5573d5f5f3e3d5ffd5b50929998505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610de89085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016132f6565b60606112c784845f85613f15565b5f5f6112c75f8560405180602001613e6790614265565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081815260c95473ffffffffffffffffffffffffffffffffffffffff166020830152808201525f6060820152608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052613f019291602001614714565b60405160208183030381529060405261402a565b606082471015613fa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610a23565b5f5f8673ffffffffffffffffffffffffffffffffffffffff168587604051613fcf9190614e53565b5f6040518083038185875af1925050503d805f8114614009576040519150601f19603f3d011682016040523d82523d5f602084013e61400e565b606091505b509150915061401f87838387614187565b979650505050505050565b5f83471015614095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610a23565b81515f036140ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610a23565b8282516020840186f5905073ffffffffffffffffffffffffffffffffffffffff81166111e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610a23565b6060831561421c5782515f036142155773ffffffffffffffffffffffffffffffffffffffff85163b614215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a23565b50816112c7565b6112c783838151156142315781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a23919061442c565b6106ae80614eb283390190565b5f5f83601f840112614282575f5ffd5b50813567ffffffffffffffff811115614299575f5ffd5b6020830191508360208285010111156142b0575f5ffd5b9250929050565b5f5f602083850312156142c8575f5ffd5b823567ffffffffffffffff8111156142de575f5ffd5b6142ea85828601614272565b90969095509350505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611175575f5ffd5b5f60208284031215614327575f5ffd5b81356111e9816142f6565b5f60208284031215614342575f5ffd5b5035919050565b5f5f5f5f6060858703121561435c575f5ffd5b8435935060208501359250604085013567ffffffffffffffff811115614380575f5ffd5b61438c87828801614272565b95989497509550505050565b5f5f5f604084860312156143aa575f5ffd5b833567ffffffffffffffff8111156143c0575f5ffd5b6143cc86828701614272565b909790965060209590950135949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6107c660208301846143e0565b5f5f5f5f5f5f60a08789031215614453575f5ffd5b8635955060208701359450604087013593506060870135614473816142f6565b9250608087013567ffffffffffffffff81111561448e575f5ffd5b61449a89828a01614272565b979a9699509497509295939492505050565b5f5f604083850312156144bd575f5ffd5b82356144c8816142f6565b946020939093013593505050565b5f5f604083850312156144e7575f5ffd5b8235915060208301356144f9816142f6565b809150509250929050565b5f606082840312156108a5575f5ffd5b5f5f5f5f5f5f5f5f610140898b03121561452c575f5ffd5b88359750602089013561453e816142f6565b9650604089013595506060890135614555816142f6565b94506080890135614565816142f6565b935060a0890135614575816142f6565b92506145848a60c08b01614504565b915061012089013567ffffffffffffffff8111156145a0575f5ffd5b6145ac8b828c01614504565b9150509295985092959890939650565b5f5f5f5f5f5f61010087890312156145d2575f5ffd5b863595506020870135945060408701356145eb816142f6565b935060608701356145fb816142f6565b925061460a8860808901614504565b915060e087013567ffffffffffffffff811115614625575f5ffd5b61463189828a01614504565b9150509295509295509295565b5f6020828403121561464e575f5ffd5b81516111e9816142f6565b600181811c9082168061466d57607f821691505b6020821081036108a5577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff81811683821601908111156107c9576107c96146a4565b5f81518060208401855e5f93019283525090919050565b5f6112c761472283866146fd565b846146fd565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261475b575f5ffd5b83018035915067ffffffffffffffff821115614775575f5ffd5b6020019150368190038213156142b0575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f82111561097857805f5260205f20601f840160051c810160208510156147db5750805b601f840160051c820191505b818110156147fa575f81556001016147e7565b5050505050565b67ffffffffffffffff83111561481957614819614789565b61482d836148278354614659565b836147b6565b5f601f84116001811461487d575f85156148475750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556147fa565b5f838152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08716915b828110156148ca57868501358255602094850194600190920191016148aa565b5086821015614905577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561498b5761498b614789565b604052919050565b5f67ffffffffffffffff8211156149ac576149ac614789565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126149e7575f5ffd5b81356149fa6149f582614993565b614944565b818152846020838601011115614a0e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215614a3c575f5ffd5b833567ffffffffffffffff811115614a52575f5ffd5b614a5e868287016149d8565b935050602084013567ffffffffffffffff811115614a7a575f5ffd5b614a86868287016149d8565b925050604084013567ffffffffffffffff811115614aa2575f5ffd5b614aae868287016149d8565b9150509250925092565b5f5f85851115614ac6575f5ffd5b83861115614ad2575f5ffd5b5050820193919092039150565b5f5f5f5f60808587031215614af2575f5ffd5b84359350602085013567ffffffffffffffff811115614b0f575f5ffd5b614b1b878288016149d8565b935050604085013567ffffffffffffffff811115614b37575f5ffd5b614b43878288016149d8565b925050606085013567ffffffffffffffff811115614b5f575f5ffd5b614b6b878288016149d8565b91505092959194509250565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ba757614ba76146a4565b5060010190565b5f5f5f60608486031215614bc0575f5ffd5b83516020850151909350614bd3816142f6565b6040850151909250614be4816142f6565b809150509250925092565b602081525f5f8354614c0081614659565b806020860152600182165f8114614c1e5760018114614c5857614c89565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166040870152604082151560051b8701019350614c89565b865f5260205f205f5b83811015614c8057815488820160400152600190910190602001614c61565b87016040019450505b509195945050505050565b5f5f5f5f5f60a08688031215614ca8575f5ffd5b8551614cb3816142f6565b6020870151909550614cc4816142f6565b6040870151909450614cd5816142f6565b60608701516080880151919450925067ffffffffffffffff811115614cf8575f5ffd5b8601601f81018813614d08575f5ffd5b8051614d166149f582614993565b818152896020838501011115614d2a575f5ffd5b8160208401602083015e5f602083830101528093505050509295509295909350565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015273ffffffffffffffffffffffffffffffffffffffff8416604082015282606082015260a060808201525f61401f60a08301846143e0565b848152608060208201525f614dd060808301866143e0565b8281036040840152614de281866143e0565b9050828103606084015261401f81856143e0565b7fff00000000000000000000000000000000000000000000000000000000000000831681525f6112c760018301846146fd565b5f60208284031215614e39575f5ffd5b5051919050565b818103818111156107c9576107c96146a4565b5f6107c682846146fd565b5f60208284031215614e6e575f5ffd5b815180151581146111e9575f5ffd5b83815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201525f61303160608301846143e056fe60806040526040516106ae3803806106ae833981016040819052610022916103ed565b61002d82825f610034565b5050610513565b61003d836100f1565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a25f8251118061007c5750805b156100ec576100ea836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906104af565b83610273565b505b505050565b6001600160a01b0381163b61015b5760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101cd816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101be91906104af565b6001600160a01b03163b151590565b6102325760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610152565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061029883836040518060600160405280602781526020016106876027913961029f565b9392505050565b60605f5f856001600160a01b0316856040516102bb91906104c8565b5f60405180830381855af49150503d805f81146102f3576040519150601f19603f3d011682016040523d82523d5f602084013e6102f8565b606091505b50909250905061030a86838387610314565b9695505050505050565b606083156103825782515f0361037b576001600160a01b0385163b61037b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610152565b508161038c565b61038c8383610394565b949350505050565b8151156103a45781518083602001fd5b8060405162461bcd60e51b815260040161015291906104de565b80516001600160a01b03811681146103d4575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156103fe575f5ffd5b610407836103be565b60208401519092506001600160401b03811115610422575f5ffd5b8301601f81018513610432575f5ffd5b80516001600160401b0381111561044b5761044b6103d9565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610479576104796103d9565b604052818152828201602001871015610490575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f602082840312156104bf575f5ffd5b610298826103be565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b610167806105205f395ff3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b6100d9565b565b5f6100687fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d505473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100d491906100f7565b905090565b365f5f375f5f365f845af43d5f5f3e8080156100f3573d5ff35b3d5ffd5b5f60208284031215610107575f5ffd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461012a575f5ffd5b939250505056fea264697066735822122080ece73ad85a7ea1093cd2206f92e0299e6b25c793a68823375b18dd7b0b7d5e64736f6c634300081c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206387e8e170bca96b8ae1d58482820044fa7e5f53330902663216ee7755335b5964736f6c634300081c0033" ], [ "0x000000000000000000000000000000000001000b", - "0x608060405234801561000f575f5ffd5b5060043610610029575f3560e01c806358dabd621461002d575b5f5ffd5b61004061003b366004610188565b610069565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b5f5f5f5f1b60405161007a9061016e565b8190604051809103905ff5905080158015610097573d5f5f3e3d5ffd5b5090505f5f5f1b826040516100ab9061017b565b73ffffffffffffffffffffffffffffffffffffffff90911681526020018190604051809103905ff59050801580156100e5573d5f5f3e3d5ffd5b506040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529192509082169063f2fde38b906024015f604051808303815f87803b158015610150575f5ffd5b505af1158015610162573d5f5f3e3d5ffd5b50929695505050505050565b6132ad806101c383390190565b6105dc8061347083390190565b5f60208284031215610198575f5ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681146101bb575f5ffd5b939250505056fe6080604052348015600e575f5ffd5b5060156019565b60d3565b5f54610100900460ff161560835760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161460d1575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6131cd806100e05f395ff3fe608060405234801561000f575f5ffd5b50600436106101a5575f3560e01c80637ecebe00116100e8578063a457c2d711610093578063b71bcf901161006e578063b71bcf90146103c9578063c2eeeebd146103dc578063d505accf146103fa578063dd62ed3e1461040d575f5ffd5b8063a457c2d71461037e578063a9059cbb14610391578063ae1f6aaf146103a4575f5ffd5b806395ce3e93116100c357806395ce3e931461035057806395d89b41146103635780639a6ab8701461036b575f5ffd5b80637ecebe001461030f57806384b0196e146103225780638c2a993e1461033d575f5ffd5b80633644e5151161015357806364e130cf1161012e57806364e130cf1461029257806370a08231146102b257806374f4f547146102e75780637ba8be34146102fc575f5ffd5b80633644e5151461026e578063395093511461027657806344de240a14610289575f5ffd5b806318160ddd1161018357806318160ddd1461022f57806323b872dd14610241578063313ce56714610254575f5ffd5b806306fdde03146101a9578063095ea7b3146101c757806313096a41146101ea575b5f5ffd5b6101b1610452565b6040516101be919061265c565b60405180910390f35b6101da6101d536600461268f565b610471565b60405190151581526020016101be565b60ce5461020a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101be565b6035545b6040519081526020016101be565b6101da61024f3660046126b9565b61048a565b61025c6104ad565b60405160ff90911681526020016101be565b6102336104ce565b6101da61028436600461268f565b6104d7565b61023360d05481565b60cf5461020a9073ffffffffffffffffffffffffffffffffffffffff1681565b6102336102c03660046126f7565b73ffffffffffffffffffffffffffffffffffffffff165f9081526033602052604090205490565b6102fa6102f536600461268f565b610522565b005b61025c61030a366004612757565b610710565b61023361031d3660046126f7565b610724565b61032a61074e565b6040516101be9796959493929190612796565b6102fa61034b36600461268f565b610825565b6101b161035e366004612757565b610977565b6101b1610985565b6102fa610379366004612855565b6109a4565b6101da61038c36600461268f565b610f30565b6101da61039f36600461268f565b611000565b60cd5461020a90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102fa6103d73660046128bb565b61100d565b60ce5473ffffffffffffffffffffffffffffffffffffffff1661020a565b6102fa610408366004612954565b6113dd565b61023361041b3660046129c0565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260346020908152604080832093909416825291909152205490565b60cc5460609060ff1615610464575f5ffd5b61046c611599565b905090565b5f3361047e818585611629565b60019150505b92915050565b5f336104978582856117dc565b6104a28585856118b2565b506001949350505050565b60cc545f9062010000900460ff16156104c4575f5ffd5b5060cd5460ff1690565b5f61046c611b26565b335f81815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061047e908290869061051d908790612a24565b611629565b60cf5473ffffffffffffffffffffffffffffffffffffffff16806106425761054e620100006004612a37565b905061055e620100006004612a37565b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905561063e6105b4620100006004612a37565b73ffffffffffffffffffffffffffffffffffffffff16632f90b1846040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612a63565b60ce5473ffffffffffffffffffffffffffffffffffffffff16611b2f565b60d0555b3373ffffffffffffffffffffffffffffffffffffffff821681146106b0576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b506106bb8383611b8f565b8273ffffffffffffffffffffffffffffffffffffffff167f9b5b9a05e4726d8bb959f1440e05c6b8109443f2083bc4e386237d76545265538360405161070391815260200190565b60405180910390a2505050565b5f61071d82840184612a7a565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260996020526040812054610484565b5f6060805f5f5f60606065545f5f1b14801561076a5750606654155b6107d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a6564000000000000000000000060448201526064016106a7565b6107d8611d50565b6107e0611d5f565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60cf5473ffffffffffffffffffffffffffffffffffffffff16806108bb57610851620100006004612a37565b9050610861620100006004612a37565b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556108b76105b4620100006004612a37565b60d0555b3373ffffffffffffffffffffffffffffffffffffffff82168114610924576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016106a7565b5061092f8383611d6e565b8273ffffffffffffffffffffffffffffffffffffffff167f397b33b307fc137878ebfc75b295289ec0ee25a31bb5bf034f33256fe8ea2aa68360405161070391815260200190565b606061071d82840184612b91565b60cc54606090610100900460ff161561099c575f5ffd5b61046c611e61565b5f54610100900460ff16158080156109c257505f54600160ff909116105b806109db5750303b1580156109db57505f5460ff166001145b610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610ac3575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff8416610b10576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ce805473ffffffffffffffffffffffffffffffffffffffff86167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560d086905560cf80549091163317905560608080610b718686611e70565b60408051606080820183525f808352602083018190528284015291517f95ce3e9300000000000000000000000000000000000000000000000000000000815294985092965090945090925090819030906395ce3e9390610bd590899060040161265c565b5f60405180830381865afa925050508015610c2f57506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c2c9190810190612bde565b60015b610c3c5760018352610c3f565b91505b6040517f95ce3e9300000000000000000000000000000000000000000000000000000000815230906395ce3e9390610c7b90889060040161265c565b5f60405180830381865afa925050508015610cd557506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610cd29190810190612bde565b60015b610ce55760016020840152610ce8565b90505b610cf28282611f96565b610cfb82612045565b6040517f7ba8be340000000000000000000000000000000000000000000000000000000081523090637ba8be3490610d3790879060040161265c565b602060405180830381865afa925050508015610d8e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d8b91810190612c53565b60015b610d9e5760016040840152610dd1565b60cd80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff929092169190911790555b825160cc80546020860151604080880151151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff921515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff961515969096167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090941693909317949094171617905560cd54905173ffffffffffffffffffffffffffffffffffffffff8c16917f81e8e92e5873539605a102eddae7ed06d19bea042099a437cbc3644415eb740491610eb9918691869160ff1690612c6e565b60405180910390a25050505050508015610f29575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b335f81815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610ff3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106a7565b6104a28286868403611629565b5f3361047e8185856118b2565b806110195f5460ff1690565b611024906001612ca6565b60ff168160ff1614611062576040517f0ac76f0100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f548290610100900460ff1615801561108157505f5460ff8083169116105b61110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff83161761010017815561117b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d505473ffffffffffffffffffffffffffffffffffffffff1690565b90508073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ea9190612cbf565b339073ffffffffffffffffffffffffffffffffffffffff168114611253576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016106a7565b506112c588888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8c018190048102820181019092528a815292508a91508990819084018382808284375f92019190915250611f9692505050565b61130388888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061204592505050565b8860cc6113108282612cea565b505060ce5460cd5460405173ffffffffffffffffffffffffffffffffffffffff909216917f81e8e92e5873539605a102eddae7ed06d19bea042099a437cbc3644415eb74049161136d918c918c918c918c9160ff90911690612df0565b60405180910390a2505f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050505050565b83421115611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106a7565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886114758c61211d565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6114dc82612151565b90505f6114eb82878787612198565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106a7565b61158d8a8a8a611629565b50505050505050505050565b6060603680546115a890612e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546115d490612e2c565b801561161f5780601f106115f65761010080835404028352916020019161161f565b820191905f5260205f20905b81548152906001019060200180831161160257829003601f168201915b5050505050905090565b73ffffffffffffffffffffffffffffffffffffffff83166116cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff821661176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118ac578181101561189f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106a7565b6118ac8484848403611629565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff82166119f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526033602052604090205481811015611aad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff8085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b199086815260200190565b60405180910390a36118ac565b5f61046c6121be565b5f82611b3f620100006004612a37565b60408051602081019390935273ffffffffffffffffffffffffffffffffffffffff918216908301528316606082015260800160405160208183030381529060405280519060200120905092915050565b73ffffffffffffffffffffffffffffffffffffffff8216611c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526033602052604090205481811015611ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff83165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016117cf565b505050565b6060606780546115a890612e2c565b6060606880546115a890612e2c565b73ffffffffffffffffffffffffffffffffffffffff8216611deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106a7565b8060355f828254611dfc9190612a24565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6060603780546115a890612e2c565b5f60608080848403611eae576040517f99d8fec900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86865f818110611ec157611ec1612e77565b909101357fff00000000000000000000000000000000000000000000000000000000000000169150819050611f0857611efc86880188612ec2565b91955093509150611f8b565b7fff0000000000000000000000000000000000000000000000000000000000000081811601611f5957611f3e866001818a612f50565b810190611f4b9190612f77565b945094509450945050611f8d565b6040517f084a144900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92959194509250565b5f54610100900460ff1661202c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106a7565b60366120388382613053565b506037611d4b8282613053565b5f54610100900460ff166120db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106a7565b61211a816040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250612231565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526099602052604090208054600181018255905b50919050565b5f61048461215d611b26565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f5f5f6121a7878787876122ee565b915091506121b4816123d6565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6121e8612588565b6121f06125e0565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166122c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106a7565b60676122d38382613053565b5060686122e08282613053565b50505f606581905560665550565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561232357505f905060036123cd565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612374573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166123c7575f600192509250506123cd565b91505f90505b94509492505050565b5f8160048111156123e9576123e961316a565b036123f15750565b60018160048111156124055761240561316a565b0361246c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106a7565b60028160048111156124805761248061316a565b036124e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106a7565b60038160048111156124fb576124fb61316a565b0361211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b5f5f612592611d50565b8051909150156125a9578051602090910120919050565b60655480156125b85792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f5f6125ea611d5f565b805190915015612601578051602090910120919050565b60665480156125b85792915050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61071d6020830184612610565b73ffffffffffffffffffffffffffffffffffffffff8116811461211a575f5ffd5b5f5f604083850312156126a0575f5ffd5b82356126ab8161266e565b946020939093013593505050565b5f5f5f606084860312156126cb575f5ffd5b83356126d68161266e565b925060208401356126e68161266e565b929592945050506040919091013590565b5f60208284031215612707575f5ffd5b813561071d8161266e565b5f5f83601f840112612722575f5ffd5b50813567ffffffffffffffff811115612739575f5ffd5b602083019150836020828501011115612750575f5ffd5b9250929050565b5f5f60208385031215612768575f5ffd5b823567ffffffffffffffff81111561277e575f5ffd5b61278a85828601612712565b90969095509350505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201525f6127d060e0830189612610565b82810360408401526127e28189612610565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015612844578351835260209384019390920191600101612826565b50909b9a5050505050505050505050565b5f5f5f5f60608587031215612868575f5ffd5b84359350602085013561287a8161266e565b9250604085013567ffffffffffffffff811115612895575f5ffd5b6128a187828801612712565b95989497509550505050565b60ff8116811461211a575f5ffd5b5f5f5f5f5f5f86880360c08112156128d1575f5ffd5b60608112156128de575f5ffd5b50869550606087013567ffffffffffffffff8111156128fb575f5ffd5b61290789828a01612712565b909650945050608087013567ffffffffffffffff811115612926575f5ffd5b61293289828a01612712565b90945092505060a0870135612946816128ad565b809150509295509295509295565b5f5f5f5f5f5f5f60e0888a03121561296a575f5ffd5b87356129758161266e565b965060208801356129858161266e565b9550604088013594506060880135935060808801356129a3816128ad565b9699959850939692959460a0840135945060c09093013592915050565b5f5f604083850312156129d1575f5ffd5b82356129dc8161266e565b915060208301356129ec8161266e565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610484576104846129f7565b73ffffffffffffffffffffffffffffffffffffffff8181168382160190811115610484576104846129f7565b5f60208284031215612a73575f5ffd5b5051919050565b5f60208284031215612a8a575f5ffd5b813561071d816128ad565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612b0957612b09612a95565b604052919050565b5f67ffffffffffffffff821115612b2a57612b2a612a95565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f612b68612b6384612b11565b612ac2565b9050828152838383011115612b7b575f5ffd5b828260208301375f602084830101529392505050565b5f60208284031215612ba1575f5ffd5b813567ffffffffffffffff811115612bb7575f5ffd5b8201601f81018413612bc7575f5ffd5b612bd684823560208401612b56565b949350505050565b5f60208284031215612bee575f5ffd5b815167ffffffffffffffff811115612c04575f5ffd5b8201601f81018413612c14575f5ffd5b8051612c22612b6382612b11565b818152856020838501011115612c36575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f60208284031215612c63575f5ffd5b815161071d816128ad565b606081525f612c806060830186612610565b8281036020840152612c928186612610565b91505060ff83166040830152949350505050565b60ff8181168382160190811115610484576104846129f7565b5f60208284031215612ccf575f5ffd5b815161071d8161266e565b5f81358015158114610484575f5ffd5b612cf382612cda565b1515815460ff82169150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00821617835561ff00612d3360208601612cda565b151560081b1680837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000084161717845562ff0000612d7260408701612cda565b151560101b16837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000084161782171784555050505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081525f612e03606083018789612da9565b8281036020840152612e16818688612da9565b91505060ff831660408301529695505050505050565b600181811c90821680612e4057607f821691505b60208210810361214b577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82601f830112612eb3575f5ffd5b61071d83833560208501612b56565b5f5f5f60608486031215612ed4575f5ffd5b833567ffffffffffffffff811115612eea575f5ffd5b612ef686828701612ea4565b935050602084013567ffffffffffffffff811115612f12575f5ffd5b612f1e86828701612ea4565b925050604084013567ffffffffffffffff811115612f3a575f5ffd5b612f4686828701612ea4565b9150509250925092565b5f5f85851115612f5e575f5ffd5b83861115612f6a575f5ffd5b5050820193919092039150565b5f5f5f5f60808587031215612f8a575f5ffd5b84359350602085013567ffffffffffffffff811115612fa7575f5ffd5b612fb387828801612ea4565b935050604085013567ffffffffffffffff811115612fcf575f5ffd5b612fdb87828801612ea4565b925050606085013567ffffffffffffffff811115612ff7575f5ffd5b61300387828801612ea4565b91505092959194509250565b601f821115611d4b57805f5260205f20601f840160051c810160208510156130345750805b601f840160051c820191505b81811015610f29575f8155600101613040565b815167ffffffffffffffff81111561306d5761306d612a95565b6130818161307b8454612e2c565b8461300f565b6020601f8211600181146130d2575f831561309c5750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610f29565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b8281101561311f57878501518255602094850194600190920191016130ff565b508482101561315b57868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea2646970667358221220c7047fbc0724628daf0cc9c890a71fa5507bc2139f4f93edca1751ab497eb9cd64736f6c634300081c0033608060405234801561000f575f5ffd5b506040516105dc3803806105dc83398101604081905261002e91610138565b61003733610046565b61004081610095565b50610165565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381163b6101165760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f60208284031215610148575f5ffd5b81516001600160a01b038116811461015e575f5ffd5b9392505050565b61046a806101725f395ff3fe608060405234801561000f575f5ffd5b5060043610610064575f3560e01c8063715018a61161004d578063715018a6146100c05780638da5cb5b146100c8578063f2fde38b146100e5575f5ffd5b80633659cfe6146100685780635c60da1b1461007d575b5f5ffd5b61007b6100763660046103fa565b6100f8565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007b61014c565b5f5473ffffffffffffffffffffffffffffffffffffffff16610097565b61007b6100f33660046103fa565b61015f565b61010061021b565b6101098161029b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b61015461021b565b61015d5f610386565b565b61016761021b565b73ffffffffffffffffffffffffffffffffffffffff811661020f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61021881610386565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461015d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610206565b73ffffffffffffffffffffffffffffffffffffffff81163b61033f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e7472616374000000000000000000000000006064820152608401610206565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6020828403121561040a575f5ffd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461042d575f5ffd5b939250505056fea2646970667358221220796ea02e9bd544f30885b0a6af703306e3fb9954f2591c34fbb673a46f587c4264736f6c634300081c0033a2646970667358221220b7278a456d827c4e07b9a890caa58de1bbad53a1f374b2ba57f9d29e577f873364736f6c634300081c0033" + "0x608060405234801561000f575f5ffd5b5060043610610029575f3560e01c806358dabd621461002d575b5f5ffd5b61004061003b366004610188565b610069565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b5f5f5f5f1b60405161007a9061016e565b8190604051809103905ff5905080158015610097573d5f5f3e3d5ffd5b5090505f5f5f1b826040516100ab9061017b565b73ffffffffffffffffffffffffffffffffffffffff90911681526020018190604051809103905ff59050801580156100e5573d5f5f3e3d5ffd5b506040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529192509082169063f2fde38b906024015f604051808303815f87803b158015610150575f5ffd5b505af1158015610162573d5f5f3e3d5ffd5b50929695505050505050565b6132ad806101c383390190565b6105dc8061347083390190565b5f60208284031215610198575f5ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681146101bb575f5ffd5b939250505056fe6080604052348015600e575f5ffd5b5060156019565b60d3565b5f54610100900460ff161560835760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161460d1575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6131cd806100e05f395ff3fe608060405234801561000f575f5ffd5b50600436106101a5575f3560e01c80637ecebe00116100e8578063a457c2d711610093578063b71bcf901161006e578063b71bcf90146103c9578063c2eeeebd146103dc578063d505accf146103fa578063dd62ed3e1461040d575f5ffd5b8063a457c2d71461037e578063a9059cbb14610391578063ae1f6aaf146103a4575f5ffd5b806395ce3e93116100c357806395ce3e931461035057806395d89b41146103635780639a6ab8701461036b575f5ffd5b80637ecebe001461030f57806384b0196e146103225780638c2a993e1461033d575f5ffd5b80633644e5151161015357806364e130cf1161012e57806364e130cf1461029257806370a08231146102b257806374f4f547146102e75780637ba8be34146102fc575f5ffd5b80633644e5151461026e578063395093511461027657806344de240a14610289575f5ffd5b806318160ddd1161018357806318160ddd1461022f57806323b872dd14610241578063313ce56714610254575f5ffd5b806306fdde03146101a9578063095ea7b3146101c757806313096a41146101ea575b5f5ffd5b6101b1610452565b6040516101be919061265c565b60405180910390f35b6101da6101d536600461268f565b610471565b60405190151581526020016101be565b60ce5461020a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101be565b6035545b6040519081526020016101be565b6101da61024f3660046126b9565b61048a565b61025c6104ad565b60405160ff90911681526020016101be565b6102336104ce565b6101da61028436600461268f565b6104d7565b61023360d05481565b60cf5461020a9073ffffffffffffffffffffffffffffffffffffffff1681565b6102336102c03660046126f7565b73ffffffffffffffffffffffffffffffffffffffff165f9081526033602052604090205490565b6102fa6102f536600461268f565b610522565b005b61025c61030a366004612757565b610710565b61023361031d3660046126f7565b610724565b61032a61074e565b6040516101be9796959493929190612796565b6102fa61034b36600461268f565b610825565b6101b161035e366004612757565b610977565b6101b1610985565b6102fa610379366004612855565b6109a4565b6101da61038c36600461268f565b610f30565b6101da61039f36600461268f565b611000565b60cd5461020a90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102fa6103d73660046128bb565b61100d565b60ce5473ffffffffffffffffffffffffffffffffffffffff1661020a565b6102fa610408366004612954565b6113dd565b61023361041b3660046129c0565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260346020908152604080832093909416825291909152205490565b60cc5460609060ff1615610464575f5ffd5b61046c611599565b905090565b5f3361047e818585611629565b60019150505b92915050565b5f336104978582856117dc565b6104a28585856118b2565b506001949350505050565b60cc545f9062010000900460ff16156104c4575f5ffd5b5060cd5460ff1690565b5f61046c611b26565b335f81815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061047e908290869061051d908790612a24565b611629565b60cf5473ffffffffffffffffffffffffffffffffffffffff16806106425761054e620100006004612a37565b905061055e620100006004612a37565b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905561063e6105b4620100006004612a37565b73ffffffffffffffffffffffffffffffffffffffff16632f90b1846040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612a63565b60ce5473ffffffffffffffffffffffffffffffffffffffff16611b2f565b60d0555b3373ffffffffffffffffffffffffffffffffffffffff821681146106b0576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b506106bb8383611b8f565b8273ffffffffffffffffffffffffffffffffffffffff167f9b5b9a05e4726d8bb959f1440e05c6b8109443f2083bc4e386237d76545265538360405161070391815260200190565b60405180910390a2505050565b5f61071d82840184612a7a565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260996020526040812054610484565b5f6060805f5f5f60606065545f5f1b14801561076a5750606654155b6107d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a6564000000000000000000000060448201526064016106a7565b6107d8611d50565b6107e0611d5f565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60cf5473ffffffffffffffffffffffffffffffffffffffff16806108bb57610851620100006004612a37565b9050610861620100006004612a37565b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556108b76105b4620100006004612a37565b60d0555b3373ffffffffffffffffffffffffffffffffffffffff82168114610924576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016106a7565b5061092f8383611d6e565b8273ffffffffffffffffffffffffffffffffffffffff167f397b33b307fc137878ebfc75b295289ec0ee25a31bb5bf034f33256fe8ea2aa68360405161070391815260200190565b606061071d82840184612b91565b60cc54606090610100900460ff161561099c575f5ffd5b61046c611e61565b5f54610100900460ff16158080156109c257505f54600160ff909116105b806109db5750303b1580156109db57505f5460ff166001145b610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610ac3575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff8416610b10576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ce805473ffffffffffffffffffffffffffffffffffffffff86167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560d086905560cf80549091163317905560608080610b718686611e70565b60408051606080820183525f808352602083018190528284015291517f95ce3e9300000000000000000000000000000000000000000000000000000000815294985092965090945090925090819030906395ce3e9390610bd590899060040161265c565b5f60405180830381865afa925050508015610c2f57506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c2c9190810190612bde565b60015b610c3c5760018352610c3f565b91505b6040517f95ce3e9300000000000000000000000000000000000000000000000000000000815230906395ce3e9390610c7b90889060040161265c565b5f60405180830381865afa925050508015610cd557506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610cd29190810190612bde565b60015b610ce55760016020840152610ce8565b90505b610cf28282611f96565b610cfb82612045565b6040517f7ba8be340000000000000000000000000000000000000000000000000000000081523090637ba8be3490610d3790879060040161265c565b602060405180830381865afa925050508015610d8e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d8b91810190612c53565b60015b610d9e5760016040840152610dd1565b60cd80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff929092169190911790555b825160cc80546020860151604080880151151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff921515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff961515969096167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090941693909317949094171617905560cd54905173ffffffffffffffffffffffffffffffffffffffff8c16917f81e8e92e5873539605a102eddae7ed06d19bea042099a437cbc3644415eb740491610eb9918691869160ff1690612c6e565b60405180910390a25050505050508015610f29575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b335f81815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610ff3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106a7565b6104a28286868403611629565b5f3361047e8185856118b2565b806110195f5460ff1690565b611024906001612ca6565b60ff168160ff1614611062576040517f0ac76f0100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f548290610100900460ff1615801561108157505f5460ff8083169116105b61110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff83161761010017815561117b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d505473ffffffffffffffffffffffffffffffffffffffff1690565b90508073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ea9190612cbf565b339073ffffffffffffffffffffffffffffffffffffffff168114611253576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016106a7565b506112c588888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8c018190048102820181019092528a815292508a91508990819084018382808284375f92019190915250611f9692505050565b61130388888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061204592505050565b8860cc6113108282612cea565b505060ce5460cd5460405173ffffffffffffffffffffffffffffffffffffffff909216917f81e8e92e5873539605a102eddae7ed06d19bea042099a437cbc3644415eb74049161136d918c918c918c918c9160ff90911690612df0565b60405180910390a2505f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050505050565b83421115611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106a7565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886114758c61211d565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6114dc82612151565b90505f6114eb82878787612198565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106a7565b61158d8a8a8a611629565b50505050505050505050565b6060603680546115a890612e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546115d490612e2c565b801561161f5780601f106115f65761010080835404028352916020019161161f565b820191905f5260205f20905b81548152906001019060200180831161160257829003601f168201915b5050505050905090565b73ffffffffffffffffffffffffffffffffffffffff83166116cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff821661176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118ac578181101561189f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106a7565b6118ac8484848403611629565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff82166119f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526033602052604090205481811015611aad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff8085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b199086815260200190565b60405180910390a36118ac565b5f61046c6121be565b5f82611b3f620100006004612a37565b60408051602081019390935273ffffffffffffffffffffffffffffffffffffffff918216908301528316606082015260800160405160208183030381529060405280519060200120905092915050565b73ffffffffffffffffffffffffffffffffffffffff8216611c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526033602052604090205481811015611ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff83165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016117cf565b505050565b6060606780546115a890612e2c565b6060606880546115a890612e2c565b73ffffffffffffffffffffffffffffffffffffffff8216611deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106a7565b8060355f828254611dfc9190612a24565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6060603780546115a890612e2c565b5f60608080848403611eae576040517f99d8fec900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86865f818110611ec157611ec1612e77565b909101357fff00000000000000000000000000000000000000000000000000000000000000169150819050611f0857611efc86880188612ec2565b91955093509150611f8b565b7fff0000000000000000000000000000000000000000000000000000000000000081811601611f5957611f3e866001818a612f50565b810190611f4b9190612f77565b945094509450945050611f8d565b6040517f084a144900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92959194509250565b5f54610100900460ff1661202c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106a7565b60366120388382613053565b506037611d4b8282613053565b5f54610100900460ff166120db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106a7565b61211a816040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250612231565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526099602052604090208054600181018255905b50919050565b5f61048461215d611b26565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f5f5f6121a7878787876122ee565b915091506121b4816123d6565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6121e8612588565b6121f06125e0565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166122c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106a7565b60676122d38382613053565b5060686122e08282613053565b50505f606581905560665550565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561232357505f905060036123cd565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612374573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166123c7575f600192509250506123cd565b91505f90505b94509492505050565b5f8160048111156123e9576123e961316a565b036123f15750565b60018160048111156124055761240561316a565b0361246c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106a7565b60028160048111156124805761248061316a565b036124e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106a7565b60038160048111156124fb576124fb61316a565b0361211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b5f5f612592611d50565b8051909150156125a9578051602090910120919050565b60655480156125b85792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f5f6125ea611d5f565b805190915015612601578051602090910120919050565b60665480156125b85792915050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61071d6020830184612610565b73ffffffffffffffffffffffffffffffffffffffff8116811461211a575f5ffd5b5f5f604083850312156126a0575f5ffd5b82356126ab8161266e565b946020939093013593505050565b5f5f5f606084860312156126cb575f5ffd5b83356126d68161266e565b925060208401356126e68161266e565b929592945050506040919091013590565b5f60208284031215612707575f5ffd5b813561071d8161266e565b5f5f83601f840112612722575f5ffd5b50813567ffffffffffffffff811115612739575f5ffd5b602083019150836020828501011115612750575f5ffd5b9250929050565b5f5f60208385031215612768575f5ffd5b823567ffffffffffffffff81111561277e575f5ffd5b61278a85828601612712565b90969095509350505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201525f6127d060e0830189612610565b82810360408401526127e28189612610565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015612844578351835260209384019390920191600101612826565b50909b9a5050505050505050505050565b5f5f5f5f60608587031215612868575f5ffd5b84359350602085013561287a8161266e565b9250604085013567ffffffffffffffff811115612895575f5ffd5b6128a187828801612712565b95989497509550505050565b60ff8116811461211a575f5ffd5b5f5f5f5f5f5f86880360c08112156128d1575f5ffd5b60608112156128de575f5ffd5b50869550606087013567ffffffffffffffff8111156128fb575f5ffd5b61290789828a01612712565b909650945050608087013567ffffffffffffffff811115612926575f5ffd5b61293289828a01612712565b90945092505060a0870135612946816128ad565b809150509295509295509295565b5f5f5f5f5f5f5f60e0888a03121561296a575f5ffd5b87356129758161266e565b965060208801356129858161266e565b9550604088013594506060880135935060808801356129a3816128ad565b9699959850939692959460a0840135945060c09093013592915050565b5f5f604083850312156129d1575f5ffd5b82356129dc8161266e565b915060208301356129ec8161266e565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610484576104846129f7565b73ffffffffffffffffffffffffffffffffffffffff8181168382160190811115610484576104846129f7565b5f60208284031215612a73575f5ffd5b5051919050565b5f60208284031215612a8a575f5ffd5b813561071d816128ad565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612b0957612b09612a95565b604052919050565b5f67ffffffffffffffff821115612b2a57612b2a612a95565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f612b68612b6384612b11565b612ac2565b9050828152838383011115612b7b575f5ffd5b828260208301375f602084830101529392505050565b5f60208284031215612ba1575f5ffd5b813567ffffffffffffffff811115612bb7575f5ffd5b8201601f81018413612bc7575f5ffd5b612bd684823560208401612b56565b949350505050565b5f60208284031215612bee575f5ffd5b815167ffffffffffffffff811115612c04575f5ffd5b8201601f81018413612c14575f5ffd5b8051612c22612b6382612b11565b818152856020838501011115612c36575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f60208284031215612c63575f5ffd5b815161071d816128ad565b606081525f612c806060830186612610565b8281036020840152612c928186612610565b91505060ff83166040830152949350505050565b60ff8181168382160190811115610484576104846129f7565b5f60208284031215612ccf575f5ffd5b815161071d8161266e565b5f81358015158114610484575f5ffd5b612cf382612cda565b1515815460ff82169150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00821617835561ff00612d3360208601612cda565b151560081b1680837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000084161717845562ff0000612d7260408701612cda565b151560101b16837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000084161782171784555050505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081525f612e03606083018789612da9565b8281036020840152612e16818688612da9565b91505060ff831660408301529695505050505050565b600181811c90821680612e4057607f821691505b60208210810361214b577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82601f830112612eb3575f5ffd5b61071d83833560208501612b56565b5f5f5f60608486031215612ed4575f5ffd5b833567ffffffffffffffff811115612eea575f5ffd5b612ef686828701612ea4565b935050602084013567ffffffffffffffff811115612f12575f5ffd5b612f1e86828701612ea4565b925050604084013567ffffffffffffffff811115612f3a575f5ffd5b612f4686828701612ea4565b9150509250925092565b5f5f85851115612f5e575f5ffd5b83861115612f6a575f5ffd5b5050820193919092039150565b5f5f5f5f60808587031215612f8a575f5ffd5b84359350602085013567ffffffffffffffff811115612fa7575f5ffd5b612fb387828801612ea4565b935050604085013567ffffffffffffffff811115612fcf575f5ffd5b612fdb87828801612ea4565b925050606085013567ffffffffffffffff811115612ff7575f5ffd5b61300387828801612ea4565b91505092959194509250565b601f821115611d4b57805f5260205f20601f840160051c810160208510156130345750805b601f840160051c820191505b81811015610f29575f8155600101613040565b815167ffffffffffffffff81111561306d5761306d612a95565b6130818161307b8454612e2c565b8461300f565b6020601f8211600181146130d2575f831561309c5750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610f29565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b8281101561311f57878501518255602094850194600190920191016130ff565b508482101561315b57868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea2646970667358221220fa1445a64a07a6bbbe232325f435cb00c34dc0280c83e6f1fb229d5513731acb64736f6c634300081c0033608060405234801561000f575f5ffd5b506040516105dc3803806105dc83398101604081905261002e91610138565b61003733610046565b61004081610095565b50610165565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381163b6101165760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f60208284031215610148575f5ffd5b81516001600160a01b038116811461015e575f5ffd5b9392505050565b61046a806101725f395ff3fe608060405234801561000f575f5ffd5b5060043610610064575f3560e01c8063715018a61161004d578063715018a6146100c05780638da5cb5b146100c8578063f2fde38b146100e5575f5ffd5b80633659cfe6146100685780635c60da1b1461007d575b5f5ffd5b61007b6100763660046103fa565b6100f8565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007b61014c565b5f5473ffffffffffffffffffffffffffffffffffffffff16610097565b61007b6100f33660046103fa565b61015f565b61010061021b565b6101098161029b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b61015461021b565b61015d5f610386565b565b61016761021b565b73ffffffffffffffffffffffffffffffffffffffff811661020f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61021881610386565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461015d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610206565b73ffffffffffffffffffffffffffffffffffffffff81163b61033f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e7472616374000000000000000000000000006064820152608401610206565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6020828403121561040a575f5ffd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461042d575f5ffd5b939250505056fea2646970667358221220796ea02e9bd544f30885b0a6af703306e3fb9954f2591c34fbb673a46f587c4264736f6c634300081c0033a26469706673582212201c15557612580d47b31f43d8ab6f5e430b92d3daa5a2fe169214fe6fa58bcb9b64736f6c634300081c0033" ], [ "0x000000000000000000000000000000000001000a", - "0x60806040526004361061016d575f3560e01c806379ba5097116100c6578063b21577161161007c578063f1d9db3311610057578063f1d9db33146103ed578063f2fde38b1461040c578063f7c7eb921461042b575f5ffd5b8063b21577161461036c578063c6a70bbb14610397578063e30c3978146103c3575f5ffd5b80638456cb59116100ac5780638456cb591461031a5780638da5cb5b1461032e578063ac700e6314610358575f5ffd5b806379ba5097146102f157806381eccdd414610305575f5ffd5b80633f4ba83a11610126578063619a038c11610101578063619a038c1461029e578063699b0fb9146102bd578063715018a6146102dd575f5ffd5b80633f4ba83a146102545780635004dafd146102685780635c975abb14610287575f5ffd5b80632a641114116101565780632a641114146101f35780632f90b1841461021c57806336ba03551461023f575f5ffd5b80631657ec181461017157806326ce0686146101c7575b5f5ffd5b34801561017c575f5ffd5b5060fd5461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101d2575f5ffd5b5060fe5461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101fe575f5ffd5b5060c95461020c9060ff1681565b60405190151581526020016101be565b348015610227575f5ffd5b5061023160fc5481565b6040519081526020016101be565b61025261024d3660046121c6565b61043f565b005b34801561025f575f5ffd5b50610252610ade565b348015610273575f5ffd5b50610252610282366004612215565b610af0565b348015610292575f5ffd5b5060975460ff1661020c565b3480156102a9575f5ffd5b506102526102b8366004612256565b610ba2565b6102d06102cb3660046122ba565b610c41565b6040516101be9190612374565b3480156102e8575f5ffd5b506102526113c8565b3480156102fc575f5ffd5b506102526113d9565b348015610310575f5ffd5b5061023160fb5481565b348015610325575f5ffd5b5061025261148e565b348015610339575f5ffd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661019d565b348015610363575f5ffd5b5061025261149e565b348015610377575f5ffd5b5061023161038636600461238d565b60cf6020525f908152604090205481565b3480156103a2575f5ffd5b5060ff5461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ce575f5ffd5b5060655473ffffffffffffffffffffffffffffffffffffffff1661019d565b3480156103f8575f5ffd5b506102526104073660046123a4565b6114d3565b348015610417575f5ffd5b506102526104263660046123f4565b6115c1565b348015610436575f5ffd5b50610252611671565b348015610478576040517f536ec84b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff5473ffffffffffffffffffffffffffffffffffffffff16331461050e57336104b760ff5473ffffffffffffffffffffffffffffffffffffffff1690565b6040517ff306a77000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201526044015b60405180910390fd5b6105166116a3565b60c95460ff1615610553576040517f3312a45000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610560838501856125af565b80515f90815260cf60205260409020549091508015801590610583575060fc5446145b1561061c576001818082146105cd576040517fde1362a200000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610505565b505060a0820151600290808214610619576040517fde1362a200000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610505565b50505b60a082015182515f90815260cf60205260409020555f5f61065260fd5473ffffffffffffffffffffffffffffffffffffffff1690565b845160208601516040517ff276712900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff939093169263f2767129926106ad928d92600401612678565b60408051808303815f875af11580156106c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ec91906126c5565b909250905073ffffffffffffffffffffffffffffffffffffffff821615158061095057845160608601516040517fe8a71ca900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169263e8a71ca992610766926004016126fd565b6020604051808303815f875af1158015610782573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a69190612715565b925073ffffffffffffffffffffffffffffffffffffffff83166107fb5784516040517f23f3c3570000000000000000000000000000000000000000000000000000000081526004810191909152602401610505565b60fd5473ffffffffffffffffffffffffffffffffffffffff1685516040517f7011be85000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff85811660248301525f60448301529190911690637011be85906064015f604051808303815f87803b15801561088c575f5ffd5b505af115801561089e573d5f5f3e3d5ffd5b505050506108c160fe5473ffffffffffffffffffffffffffffffffffffffff1690565b855160408088015190517f66e8a86b0000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff91909116906366e8a86b906044015f604051808303815f87803b158015610935575f5ffd5b505af1158015610947573d5f5f3e3d5ffd5b505050506109f4565b60fe5473ffffffffffffffffffffffffffffffffffffffff16855160408088015190517f36747fe50000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff91909116906336747fe5906044015f604051808303815f87803b1580156109dd575f5ffd5b505af11580156109ef573d5f5f3e3d5ffd5b505050505b60808501516040517f3f42d5dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851691633f42d5dd91610a4c91908590600401612730565b5f604051808303815f87803b158015610a63575f5ffd5b505af1158015610a75573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff1689865f01517f1612cd2fb19a92250ed895cef0c4b70771f2c15b8e4f01a7e13aba8f57ae8b9d8860a00151604051610aca91815260200190565b60405180910390a450505050505050505050565b610ae6611710565b610aee611791565b565b610afd618000600b612780565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b63576040517fb35a7373000000000000000000000000000000000000000000000000000000008152336004820152602401610505565b81158015610b72575060fc5481145b610b9e57808214610b9e57465f90815260cf602052604081208054909190610b99906127ac565b909155505b5050565b610baa61180f565b610bb7618000600f612780565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c1d576040517fcbd9d2e0000000000000000000000000000000000000000000000000000000008152336004820152602401610505565b610c2561186f565b610c31858484846114d3565b610c3a8461196f565b5050505050565b6060610c4d34876127e3565b8015610c85576040517f536ec84b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff5473ffffffffffffffffffffffffffffffffffffffff163314610cc457336104b760ff5473ffffffffffffffffffffffffffffffffffffffff1690565b610ccc6116a3565b60c95460ff1615610d09576040517f3312a45000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610d16848601866127f6565b8051909150610d3a60fd5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff166324358c61826040518263ffffffff1660e01b8152600401610d7491815260200190565b602060405180830381865afa158015610d8f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db39190612897565b881488610dd560fd5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff166324358c61846040518263ffffffff1660e01b8152600401610e0f91815260200190565b602060405180830381865afa158015610e2a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4e9190612897565b9091610e8f576040517f48857c1d00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610505565b50505f610eb160fd5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663e680c4c1836040518263ffffffff1660e01b8152600401610eeb91815260200190565b602060405180830381865afa158015610f06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2a9190612715565b905060605f610f4e60fd5473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f0641e4f700000000000000000000000000000000000000000000000000000000815260048101869052602481018f905273ffffffffffffffffffffffffffffffffffffffff9190911690630641e4f79060440160408051808303815f875af1158015610fc0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe491906126c5565b909350905073ffffffffffffffffffffffffffffffffffffffff8316611036576040517f7b968d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16636e9960c36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a39190612715565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161461119557898373ffffffffffffffffffffffffffffffffffffffff16636e9960c36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111439190612715565b6040517ff5e39c1f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610505565b60208501516040517ff85894c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169163f85894c5916111ec9188916004016126fd565b5f604051808303815f875af1158015611207573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261124c91908101906128ae565b915061125760fc5490565b8d1415801561132957508073ffffffffffffffffffffffffffffffffffffffff1661129760fd5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16639d5bd3da8f6040518263ffffffff1660e01b81526004016112d191815260200190565b602060405180830381865afa1580156112ec573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113109190612715565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611360576040517f3691756500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fc5446146113a45760fc548d146113a4576040517f4010a88d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506113b8838d8c858d868a604001516119a0565b9c9b505050505050505050505050565b6113d0611710565b610aee5f61196f565b606554339073ffffffffffffffffffffffffffffffffffffffff168114611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610505565b61148b8161196f565b50565b611496611710565b610aee611c75565b6114a6611710565b60c980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6114e0618000600f612780565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611546576040517fcbd9d2e0000000000000000000000000000000000000000000000000000000008152336004820152602401610505565b60fd805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc86905560ff805485841690831617905560fe8054928416929091169190911790556115b8846001611cd0565b60fb5550505050565b6115c9611710565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561162c60335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b611679611710565b60c980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60975460ff1615610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610505565b60335473ffffffffffffffffffffffffffffffffffffffff163314610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610505565b611799611d31565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390a1565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf480546001909155801561148b576040517fdf3a8fdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960448201527f616c697a696e67000000000000000000000000000000000000000000000000006064820152608401610505565b5f5460ff90811614610aee575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611805565b606580547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561148b81611d9d565b60605f8573ffffffffffffffffffffffffffffffffffffffff166364b554ad6119c860fc5490565b8a14611a645760fd546040517fe680c4c1000000000000000000000000000000000000000000000000000000008152600481018c905273ffffffffffffffffffffffffffffffffffffffff9091169063e680c4c190602401602060405180830381865afa158015611a3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a5f9190612715565b611a8f565b611a8f60017f6fec4315a24cdd31bf1c745ab80046dd00c532db52d172866ebaf0e74c0f5892612923565b87866040518463ffffffff1660e01b8152600401611aaf93929190612936565b5f604051808303815f875af1158015611aca573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611b0f91908101906128ae565b5f8a815260cf602052604090205490915060028110611b5a576040517f47d42b1b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b63816127ac565b5f8b815260cf60205260408120829055909150611b9560fe5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663f688e0038c6040518263ffffffff1660e01b8152600401611bcf91815260200190565b602060405180830381865afa158015611bea573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c0e9190612897565b9050611c1960fc5490565b505f611c288c83898787611e13565b90508a8a8d7f49fa030943cac44fb28e268276120f169082a0514cda6c8d0edf91fdfedaba0386604051611c5e91815260200190565b60405180910390a49b9a5050505050505050505050565b611c7d6116a3565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117e43390565b5f82611ce0620100006004612780565b60408051602081019390935273ffffffffffffffffffffffffffffffffffffffff91821690830152831660608201526080016040516020818303038152906040528051906020012090505b92915050565b60975460ff16610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610505565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60605f611e3560fd5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663e52db4ca886040518263ffffffff1660e01b8152600401611e6f91815260200190565b602060405180830381865afa158015611e8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eae9190612897565b604080516060810182528281525f6020820181905291810191909152909150611ed660fc5490565b4603612128575f611efc60ff5473ffffffffffffffffffffffffffffffffffffffff1690565b90505f8173ffffffffffffffffffffffffffffffffffffffff166364e130cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f48573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f6c9190612715565b6040517fb45414990000000000000000000000000000000000000000000000000000000081526004810186905290915073ffffffffffffffffffffffffffffffffffffffff82169063b454149990602401602060405180830381865afa158015611fd8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ffc9190612715565b73ffffffffffffffffffffffffffffffffffffffff908116604085810191909152517f5f3455b50000000000000000000000000000000000000000000000000000000081526004810186905290821690635f3455b590602401602060405180830381865afa158015612070573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120949190612897565b6020840152604083015173ffffffffffffffffffffffffffffffffffffffff166120ea576040517f178de54100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020830151612125576040517fd506f12c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b6040518060c00160405280898152602001828152602001888152602001878152602001868152602001858152506040516020016121659190612989565b6040516020818303038152906040529250505095945050505050565b5f5f83601f840112612191575f5ffd5b50813567ffffffffffffffff8111156121a8575f5ffd5b6020830191508360208285010111156121bf575f5ffd5b9250929050565b5f5f5f5f606085870312156121d9575f5ffd5b8435935060208501359250604085013567ffffffffffffffff8111156121fd575f5ffd5b61220987828801612181565b95989497509550505050565b5f5f60408385031215612226575f5ffd5b50508035926020909101359150565b73ffffffffffffffffffffffffffffffffffffffff8116811461148b575f5ffd5b5f5f5f5f5f60a0868803121561226a575f5ffd5b85359450602086013561227c81612235565b9350604086013561228c81612235565b9250606086013561229c81612235565b915060808601356122ac81612235565b809150509295509295909350565b5f5f5f5f5f5f60a087890312156122cf575f5ffd5b86359550602087013594506040870135935060608701356122ef81612235565b9250608087013567ffffffffffffffff81111561230a575f5ffd5b61231689828a01612181565b979a9699509497509295939492505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6123866020830184612328565b9392505050565b5f6020828403121561239d575f5ffd5b5035919050565b5f5f5f5f608085870312156123b7575f5ffd5b8435935060208501356123c981612235565b925060408501356123d981612235565b915060608501356123e981612235565b939692955090935050565b5f60208284031215612404575f5ffd5b813561238681612235565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561245f5761245f61240f565b60405290565b60405160c0810167ffffffffffffffff8111828210171561245f5761245f61240f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156124cf576124cf61240f565b604052919050565b5f606082840312156124e7575f5ffd5b6124ef61243c565b82358152602080840135908201529050604082013561250d81612235565b604082015292915050565b5f67ffffffffffffffff8211156125315761253161240f565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f83011261256c575f5ffd5b813561257f61257a82612518565b612488565b818152846020838601011115612593575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156125bf575f5ffd5b813567ffffffffffffffff8111156125d5575f5ffd5b820161010081850312156125e7575f5ffd5b6125ef612465565b8135815261260085602084016124d7565b60208201526080820135604082015260a082013567ffffffffffffffff811115612628575f5ffd5b6126348682850161255d565b60608301525060c082013567ffffffffffffffff811115612653575f5ffd5b61265f8682850161255d565b60808301525060e0919091013560a08201529392505050565b8381526020810183905260a081016126bd6040830184805182526020808201519083015260409081015173ffffffffffffffffffffffffffffffffffffffff16910152565b949350505050565b5f5f604083850312156126d6575f5ffd5b82516126e181612235565b60208401519092506126f281612235565b809150509250929050565b828152604060208201525f6126bd6040830184612328565b5f60208284031215612725575f5ffd5b815161238681612235565b604081525f6127426040830185612328565b905082151560208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8181168382160190811115611d2b57611d2b612753565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127dc576127dc612753565b5060010190565b80820180821115611d2b57611d2b612753565b5f60208284031215612806575f5ffd5b813567ffffffffffffffff81111561281c575f5ffd5b82016060818503121561282d575f5ffd5b61283561243c565b81358152602082013567ffffffffffffffff811115612852575f5ffd5b61285e8682850161255d565b602083015250604082013567ffffffffffffffff81111561287d575f5ffd5b6128898682850161255d565b604083015250949350505050565b5f602082840312156128a7575f5ffd5b5051919050565b5f602082840312156128be575f5ffd5b815167ffffffffffffffff8111156128d4575f5ffd5b8201601f810184136128e4575f5ffd5b80516128f261257a82612518565b818152856020838501011115612906575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b81810381811115611d2b57611d2b612753565b73ffffffffffffffffffffffffffffffffffffffff8416815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201525f6129806060830184612328565b95945050505050565b60208152815160208201525f60208301516129d16040840182805182526020808201519083015260409081015173ffffffffffffffffffffffffffffffffffffffff16910152565b50604083015160a0830152606083015161010060c08401526129f7610120840182612328565b905060808401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160e0850152612a328282612328565b91505060a0840151610100840152809150509291505056fea264697066735822122051daa6295c6a425eb18467d054de952f34197eda18074ac69b2d5d54fe8a21c864736f6c634300081c0033" + "0x60806040526004361061016d575f3560e01c806379ba5097116100c6578063b21577161161007c578063f1d9db3311610057578063f1d9db33146103ed578063f2fde38b1461040c578063f7c7eb921461042b575f5ffd5b8063b21577161461036c578063c6a70bbb14610397578063e30c3978146103c3575f5ffd5b80638456cb59116100ac5780638456cb591461031a5780638da5cb5b1461032e578063ac700e6314610358575f5ffd5b806379ba5097146102f157806381eccdd414610305575f5ffd5b80633f4ba83a11610126578063619a038c11610101578063619a038c1461029e578063699b0fb9146102bd578063715018a6146102dd575f5ffd5b80633f4ba83a146102545780635004dafd146102685780635c975abb14610287575f5ffd5b80632a641114116101565780632a641114146101f35780632f90b1841461021c57806336ba03551461023f575f5ffd5b80631657ec181461017157806326ce0686146101c7575b5f5ffd5b34801561017c575f5ffd5b5060fd5461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101d2575f5ffd5b5060fe5461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101fe575f5ffd5b5060c95461020c9060ff1681565b60405190151581526020016101be565b348015610227575f5ffd5b5061023160fc5481565b6040519081526020016101be565b61025261024d3660046121c6565b61043f565b005b34801561025f575f5ffd5b50610252610ade565b348015610273575f5ffd5b50610252610282366004612215565b610af0565b348015610292575f5ffd5b5060975460ff1661020c565b3480156102a9575f5ffd5b506102526102b8366004612256565b610ba2565b6102d06102cb3660046122ba565b610c41565b6040516101be9190612374565b3480156102e8575f5ffd5b506102526113c8565b3480156102fc575f5ffd5b506102526113d9565b348015610310575f5ffd5b5061023160fb5481565b348015610325575f5ffd5b5061025261148e565b348015610339575f5ffd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661019d565b348015610363575f5ffd5b5061025261149e565b348015610377575f5ffd5b5061023161038636600461238d565b60cf6020525f908152604090205481565b3480156103a2575f5ffd5b5060ff5461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ce575f5ffd5b5060655473ffffffffffffffffffffffffffffffffffffffff1661019d565b3480156103f8575f5ffd5b506102526104073660046123a4565b6114d3565b348015610417575f5ffd5b506102526104263660046123f4565b6115c1565b348015610436575f5ffd5b50610252611671565b348015610478576040517f536ec84b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff5473ffffffffffffffffffffffffffffffffffffffff16331461050e57336104b760ff5473ffffffffffffffffffffffffffffffffffffffff1690565b6040517ff306a77000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201526044015b60405180910390fd5b6105166116a3565b60c95460ff1615610553576040517f3312a45000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610560838501856125af565b80515f90815260cf60205260409020549091508015801590610583575060fc5446145b1561061c576001818082146105cd576040517fde1362a200000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610505565b505060a0820151600290808214610619576040517fde1362a200000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610505565b50505b60a082015182515f90815260cf60205260409020555f5f61065260fd5473ffffffffffffffffffffffffffffffffffffffff1690565b845160208601516040517ff276712900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff939093169263f2767129926106ad928d92600401612678565b60408051808303815f875af11580156106c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ec91906126c5565b909250905073ffffffffffffffffffffffffffffffffffffffff821615158061095057845160608601516040517fe8a71ca900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169263e8a71ca992610766926004016126fd565b6020604051808303815f875af1158015610782573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a69190612715565b925073ffffffffffffffffffffffffffffffffffffffff83166107fb5784516040517f23f3c3570000000000000000000000000000000000000000000000000000000081526004810191909152602401610505565b60fd5473ffffffffffffffffffffffffffffffffffffffff1685516040517f7011be85000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff85811660248301525f60448301529190911690637011be85906064015f604051808303815f87803b15801561088c575f5ffd5b505af115801561089e573d5f5f3e3d5ffd5b505050506108c160fe5473ffffffffffffffffffffffffffffffffffffffff1690565b855160408088015190517f66e8a86b0000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff91909116906366e8a86b906044015f604051808303815f87803b158015610935575f5ffd5b505af1158015610947573d5f5f3e3d5ffd5b505050506109f4565b60fe5473ffffffffffffffffffffffffffffffffffffffff16855160408088015190517f36747fe50000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff91909116906336747fe5906044015f604051808303815f87803b1580156109dd575f5ffd5b505af11580156109ef573d5f5f3e3d5ffd5b505050505b60808501516040517f3f42d5dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851691633f42d5dd91610a4c91908590600401612730565b5f604051808303815f87803b158015610a63575f5ffd5b505af1158015610a75573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff1689865f01517f1612cd2fb19a92250ed895cef0c4b70771f2c15b8e4f01a7e13aba8f57ae8b9d8860a00151604051610aca91815260200190565b60405180910390a450505050505050505050565b610ae6611710565b610aee611791565b565b610afd618000600b612780565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b63576040517fb35a7373000000000000000000000000000000000000000000000000000000008152336004820152602401610505565b81158015610b72575060fc5481145b610b9e57808214610b9e57465f90815260cf602052604081208054909190610b99906127ac565b909155505b5050565b610baa61180f565b610bb7618000600f612780565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c1d576040517fcbd9d2e0000000000000000000000000000000000000000000000000000000008152336004820152602401610505565b610c2561186f565b610c31858484846114d3565b610c3a8461196f565b5050505050565b6060610c4d34876127e3565b8015610c85576040517f536ec84b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff5473ffffffffffffffffffffffffffffffffffffffff163314610cc457336104b760ff5473ffffffffffffffffffffffffffffffffffffffff1690565b610ccc6116a3565b60c95460ff1615610d09576040517f3312a45000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610d16848601866127f6565b8051909150610d3a60fd5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff166324358c61826040518263ffffffff1660e01b8152600401610d7491815260200190565b602060405180830381865afa158015610d8f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db39190612897565b881488610dd560fd5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff166324358c61846040518263ffffffff1660e01b8152600401610e0f91815260200190565b602060405180830381865afa158015610e2a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4e9190612897565b9091610e8f576040517f48857c1d00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610505565b50505f610eb160fd5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663e680c4c1836040518263ffffffff1660e01b8152600401610eeb91815260200190565b602060405180830381865afa158015610f06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2a9190612715565b905060605f610f4e60fd5473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f0641e4f700000000000000000000000000000000000000000000000000000000815260048101869052602481018f905273ffffffffffffffffffffffffffffffffffffffff9190911690630641e4f79060440160408051808303815f875af1158015610fc0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe491906126c5565b909350905073ffffffffffffffffffffffffffffffffffffffff8316611036576040517f7b968d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16636e9960c36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a39190612715565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161461119557898373ffffffffffffffffffffffffffffffffffffffff16636e9960c36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111439190612715565b6040517ff5e39c1f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610505565b60208501516040517ff85894c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169163f85894c5916111ec9188916004016126fd565b5f604051808303815f875af1158015611207573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261124c91908101906128ae565b915061125760fc5490565b8d1415801561132957508073ffffffffffffffffffffffffffffffffffffffff1661129760fd5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16639d5bd3da8f6040518263ffffffff1660e01b81526004016112d191815260200190565b602060405180830381865afa1580156112ec573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113109190612715565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611360576040517f3691756500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fc5446146113a45760fc548d146113a4576040517f4010a88d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506113b8838d8c858d868a604001516119a0565b9c9b505050505050505050505050565b6113d0611710565b610aee5f61196f565b606554339073ffffffffffffffffffffffffffffffffffffffff168114611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610505565b61148b8161196f565b50565b611496611710565b610aee611c75565b6114a6611710565b60c980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6114e0618000600f612780565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611546576040517fcbd9d2e0000000000000000000000000000000000000000000000000000000008152336004820152602401610505565b60fd805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc86905560ff805485841690831617905560fe8054928416929091169190911790556115b8846001611cd0565b60fb5550505050565b6115c9611710565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561162c60335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b611679611710565b60c980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60975460ff1615610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610505565b60335473ffffffffffffffffffffffffffffffffffffffff163314610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610505565b611799611d31565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390a1565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf480546001909155801561148b576040517fdf3a8fdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960448201527f616c697a696e67000000000000000000000000000000000000000000000000006064820152608401610505565b5f5460ff90811614610aee575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611805565b606580547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561148b81611d9d565b60605f8573ffffffffffffffffffffffffffffffffffffffff166364b554ad6119c860fc5490565b8a14611a645760fd546040517fe680c4c1000000000000000000000000000000000000000000000000000000008152600481018c905273ffffffffffffffffffffffffffffffffffffffff9091169063e680c4c190602401602060405180830381865afa158015611a3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a5f9190612715565b611a8f565b611a8f60017f6fec4315a24cdd31bf1c745ab80046dd00c532db52d172866ebaf0e74c0f5892612923565b87866040518463ffffffff1660e01b8152600401611aaf93929190612936565b5f604051808303815f875af1158015611aca573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611b0f91908101906128ae565b5f8a815260cf602052604090205490915060028110611b5a576040517f47d42b1b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b63816127ac565b5f8b815260cf60205260408120829055909150611b9560fe5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663f688e0038c6040518263ffffffff1660e01b8152600401611bcf91815260200190565b602060405180830381865afa158015611bea573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c0e9190612897565b9050611c1960fc5490565b505f611c288c83898787611e13565b90508a8a8d7f49fa030943cac44fb28e268276120f169082a0514cda6c8d0edf91fdfedaba0386604051611c5e91815260200190565b60405180910390a49b9a5050505050505050505050565b611c7d6116a3565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117e43390565b5f82611ce0620100006004612780565b60408051602081019390935273ffffffffffffffffffffffffffffffffffffffff91821690830152831660608201526080016040516020818303038152906040528051906020012090505b92915050565b60975460ff16610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610505565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60605f611e3560fd5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663e52db4ca886040518263ffffffff1660e01b8152600401611e6f91815260200190565b602060405180830381865afa158015611e8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eae9190612897565b604080516060810182528281525f6020820181905291810191909152909150611ed660fc5490565b4603612128575f611efc60ff5473ffffffffffffffffffffffffffffffffffffffff1690565b90505f8173ffffffffffffffffffffffffffffffffffffffff166364e130cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f48573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f6c9190612715565b6040517fb45414990000000000000000000000000000000000000000000000000000000081526004810186905290915073ffffffffffffffffffffffffffffffffffffffff82169063b454149990602401602060405180830381865afa158015611fd8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ffc9190612715565b73ffffffffffffffffffffffffffffffffffffffff908116604085810191909152517f5f3455b50000000000000000000000000000000000000000000000000000000081526004810186905290821690635f3455b590602401602060405180830381865afa158015612070573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120949190612897565b6020840152604083015173ffffffffffffffffffffffffffffffffffffffff166120ea576040517f178de54100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020830151612125576040517fd506f12c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b6040518060c00160405280898152602001828152602001888152602001878152602001868152602001858152506040516020016121659190612989565b6040516020818303038152906040529250505095945050505050565b5f5f83601f840112612191575f5ffd5b50813567ffffffffffffffff8111156121a8575f5ffd5b6020830191508360208285010111156121bf575f5ffd5b9250929050565b5f5f5f5f606085870312156121d9575f5ffd5b8435935060208501359250604085013567ffffffffffffffff8111156121fd575f5ffd5b61220987828801612181565b95989497509550505050565b5f5f60408385031215612226575f5ffd5b50508035926020909101359150565b73ffffffffffffffffffffffffffffffffffffffff8116811461148b575f5ffd5b5f5f5f5f5f60a0868803121561226a575f5ffd5b85359450602086013561227c81612235565b9350604086013561228c81612235565b9250606086013561229c81612235565b915060808601356122ac81612235565b809150509295509295909350565b5f5f5f5f5f5f60a087890312156122cf575f5ffd5b86359550602087013594506040870135935060608701356122ef81612235565b9250608087013567ffffffffffffffff81111561230a575f5ffd5b61231689828a01612181565b979a9699509497509295939492505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6123866020830184612328565b9392505050565b5f6020828403121561239d575f5ffd5b5035919050565b5f5f5f5f608085870312156123b7575f5ffd5b8435935060208501356123c981612235565b925060408501356123d981612235565b915060608501356123e981612235565b939692955090935050565b5f60208284031215612404575f5ffd5b813561238681612235565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561245f5761245f61240f565b60405290565b60405160c0810167ffffffffffffffff8111828210171561245f5761245f61240f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156124cf576124cf61240f565b604052919050565b5f606082840312156124e7575f5ffd5b6124ef61243c565b82358152602080840135908201529050604082013561250d81612235565b604082015292915050565b5f67ffffffffffffffff8211156125315761253161240f565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f83011261256c575f5ffd5b813561257f61257a82612518565b612488565b818152846020838601011115612593575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156125bf575f5ffd5b813567ffffffffffffffff8111156125d5575f5ffd5b820161010081850312156125e7575f5ffd5b6125ef612465565b8135815261260085602084016124d7565b60208201526080820135604082015260a082013567ffffffffffffffff811115612628575f5ffd5b6126348682850161255d565b60608301525060c082013567ffffffffffffffff811115612653575f5ffd5b61265f8682850161255d565b60808301525060e0919091013560a08201529392505050565b8381526020810183905260a081016126bd6040830184805182526020808201519083015260409081015173ffffffffffffffffffffffffffffffffffffffff16910152565b949350505050565b5f5f604083850312156126d6575f5ffd5b82516126e181612235565b60208401519092506126f281612235565b809150509250929050565b828152604060208201525f6126bd6040830184612328565b5f60208284031215612725575f5ffd5b815161238681612235565b604081525f6127426040830185612328565b905082151560208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8181168382160190811115611d2b57611d2b612753565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127dc576127dc612753565b5060010190565b80820180821115611d2b57611d2b612753565b5f60208284031215612806575f5ffd5b813567ffffffffffffffff81111561281c575f5ffd5b82016060818503121561282d575f5ffd5b61283561243c565b81358152602082013567ffffffffffffffff811115612852575f5ffd5b61285e8682850161255d565b602083015250604082013567ffffffffffffffff81111561287d575f5ffd5b6128898682850161255d565b604083015250949350505050565b5f602082840312156128a7575f5ffd5b5051919050565b5f602082840312156128be575f5ffd5b815167ffffffffffffffff8111156128d4575f5ffd5b8201601f810184136128e4575f5ffd5b80516128f261257a82612518565b818152856020838501011115612906575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b81810381811115611d2b57611d2b612753565b73ffffffffffffffffffffffffffffffffffffffff8416815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201525f6129806060830184612328565b95945050505050565b60208152815160208201525f60208301516129d16040840182805182526020808201519083015260409081015173ffffffffffffffffffffffffffffffffffffffff16910152565b50604083015160a0830152606083015161010060c08401526129f7610120840182612328565b905060808401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160e0850152612a328282612328565b91505060a0840151610100840152809150509291505056fea2646970667358221220353c89065fb2bc840f26f2c927844049a2031f901220324ce9113773032ff3a664736f6c634300081c0033" ], [ "0x000000000000000000000000000000000001000f", - "0x608060405234801561000f575f5ffd5b506004361061016e575f3560e01c80638da5cb5b116100d2578063c7bb604111610088578063e30c397811610063578063e30c39781461031d578063f2fde38b1461033b578063fc33c15f1461034e575f5ffd5b8063c7bb6041146102ee578063cb944dec14610301578063d02012541461030a575f5ffd5b80639f46bad9116100b85780639f46bad9146102b5578063aa8facf7146102c8578063b0e6f1b0146102db575f5ffd5b80638da5cb5b146102635780639f420e78146102a2575f5ffd5b80633345359b11610127578063715018a61161010d578063715018a61461023057806379ba5097146102385780637c4ed2b614610240575f5ffd5b80633345359b146101f357806342410ced1461021d575f5ffd5b80631bafc42e116101575780631bafc42e1461019a57806328a31683146101ad5780632f90b184146101ea575f5ffd5b8063115a8ca31461017257806316e247bf14610187575b5f5ffd5b610185610180366004611360565b610361565b005b61018561019536600461139b565b6103f6565b6101856101a83660046113d9565b61047c565b6101d76101bb3660046113d9565b609860209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101d7609a5481565b6101d76102013660046113d9565b609760209081525f928352604080842090915290825290205481565b61018561022b3660046113f9565b6104fa565b61018561055c565b61018561056f565b61025361024e3660046113d9565b610624565b60405190151581526020016101e1565b60335473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e1565b6101856102b03660046113f9565b610651565b6101856102c33660046113f9565b610998565b6101856102d63660046113d9565b610a0d565b6101856102e9366004611410565b610af8565b6101856102fc3660046113f9565b610b7c565b6101d7609b5481565b6101856103183660046113f9565b610c51565b60655473ffffffffffffffffffffffffffffffffffffffff1661027d565b610185610349366004611439565b610d5c565b61025361035c3660046113f9565b610e0c565b3373ffffffffffffffffffffffffffffffffffffffff81146103cd576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b50465f908152609860209081526040808320608085013584529091529020610100909101359055565b610404620100006004611481565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461046a576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016103c4565b61047684848484610e17565b50505050565b610489618000600f611481565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104ef576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016103c4565b609a91909155609b55565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f44697361626c656420666f72207a6b73796e63206f730000000000000000000060448201526064016103c4565b610564610e81565b61056d5f610f02565b565b606554339073ffffffffffffffffffffffffffffffffffffffff168114610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084016103c4565b61062181610f02565b50565b5f61062e83610f33565b5f8481526098602090815260408083208684529091529020541490505b92915050565b5f61065a610fbb565b6040517f5f3455b5000000000000000000000000000000000000000000000000000000008152600481018490529091505f9073ffffffffffffffffffffffffffffffffffffffff831690635f3455b590602401602060405180830381865afa1580156106c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ec91906114ad565b9050468114610727576040517f7a47c9a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f97bb3ce9000000000000000000000000000000000000000000000000000000008152600481018490525f9073ffffffffffffffffffffffffffffffffffffffff8416906397bb3ce990602401602060405180830381865afa158015610792573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107b691906114c4565b90508373ffffffffffffffffffffffffffffffffffffffff8216610809576040517fda72d9950000000000000000000000000000000000000000000000000000000081526004016103c491815260200190565b505f84815260996020526040902054849060ff1615610857576040517fda4352c40000000000000000000000000000000000000000000000000000000081526004016103c491815260200190565b505f8481526099602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528316906370a0823190602401602060405180830381865afa1580156108f7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091b91906114ad565b5f848152609760209081526040808320898452909152902054909150610961907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6114df565b5f8481526097602090815260408083208984529091528120828155839290919061098c9084906114df565b90915550505050505050565b6109a0610fbb565b339073ffffffffffffffffffffffffffffffffffffffff168114610a09576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016103c4565b5050565b610a15610fbb565b339073ffffffffffffffffffffffffffffffffffffffff168114610a7e576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016103c4565b50468103610a0957610a0981835f9182526097602090815260408084209284529181528183207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905560999052902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b610b06620100006004611481565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b6c576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016103c4565b610b77838383610fcf565b505050565b610b89618000600a611481565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bef576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016103c4565b609b545f829003610bfe575050565b80610c35576040517f7e47227200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a098183609a54618000600a610c4c9190611481565b610e17565b610c5e618000600a611481565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cc4576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016103c4565b609b545f610cd6620100006004611481565b73ffffffffffffffffffffffffffffffffffffffff16635f3455b5836040518263ffffffff1660e01b8152600401610d1091815260200190565b602060405180830381865afa158015610d2b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4f91906114ad565b9050610b77828483610fcf565b610d64610e81565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155610dc760335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f61064b4683610624565b610e22848383610fea565b15610e3157610e3146856110b7565b5f610e3b46610f33565b9050610e49858285856110db565b50468303610e7a57465f9081526097602090815260408083208884529091528120805486929061098c9084906114f2565b5050505050565b60335473ffffffffffffffffffffffffffffffffffffffff16331461056d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c4565b606580547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561062181611195565b5f610f4262010000600a611481565b73ffffffffffffffffffffffffffffffffffffffff1663b2157716836040518263ffffffff1660e01b8152600401610f7c91815260200190565b602060405180830381865afa158015610f97573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064b91906114ad565b5f610fca620100006004611481565b905090565b610fd88361120b565b468103610b7757610b7746848461122e565b5f468303610ff957505f6110b0565b465f90815260986020908152604080832087845282528083205481517f18160ddd000000000000000000000000000000000000000000000000000000008152915190939273ffffffffffffffffffffffffffffffffffffffff8716926318160ddd92600480830193928290030181865afa158015611079573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109d91906114ad565b9050811580156110ab575080155b925050505b9392505050565b6110c082610f33565b5f928352609860209081526040808520938552929052912055565b5f838152609c6020908152604080832087845282528083208151808301909252805460ff1615158083526001909101549282019290925290611184576111228685856112c3565b604080518082018252600180825260208083018581525f8b8152609c83528581208d8252909252939020915182547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169015151782559151910155915061118c565b806020015191505b50949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f61121546610f33565b5050465f90815260986020908152604082209290915252565b5f838152609760209081526040808320858452909152902054811115611291576040517f07859b3b0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526064016103c4565b5f838152609760209081526040808320858452909152812080548392906112b99084906114df565b9091555050505050565b5f4683036112eb5750465f9081526097602090815260408083208684529091529020546110b0565b8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611334573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135891906114ad565b949350505050565b5f610120828403128015611372575f5ffd5b509092915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610621575f5ffd5b5f5f5f5f608085870312156113ae575f5ffd5b84359350602085013592506040850135915060608501356113ce8161137a565b939692955090935050565b5f5f604083850312156113ea575f5ffd5b50508035926020909101359150565b5f60208284031215611409575f5ffd5b5035919050565b5f5f5f60608486031215611422575f5ffd5b505081359360208301359350604090920135919050565b5f60208284031215611449575f5ffd5b81356110b08161137a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff818116838216019081111561064b5761064b611454565b5f602082840312156114bd575f5ffd5b5051919050565b5f602082840312156114d4575f5ffd5b81516110b08161137a565b8181038181111561064b5761064b611454565b8082018082111561064b5761064b61145456fea26469706673582212206a6cfd459104b763bed15aab6301fd5357cdff78bd23520695a1a7364735d2c664736f6c634300081c0033" + "0x608060405234801561000f575f5ffd5b506004361061016e575f3560e01c80638da5cb5b116100d2578063c7bb604111610088578063e30c397811610063578063e30c39781461031d578063f2fde38b1461033b578063fc33c15f1461034e575f5ffd5b8063c7bb6041146102ee578063cb944dec14610301578063d02012541461030a575f5ffd5b80639f46bad9116100b85780639f46bad9146102b5578063aa8facf7146102c8578063b0e6f1b0146102db575f5ffd5b80638da5cb5b146102635780639f420e78146102a2575f5ffd5b80633345359b11610127578063715018a61161010d578063715018a61461023057806379ba5097146102385780637c4ed2b614610240575f5ffd5b80633345359b146101f357806342410ced1461021d575f5ffd5b80631bafc42e116101575780631bafc42e1461019a57806328a31683146101ad5780632f90b184146101ea575f5ffd5b8063115a8ca31461017257806316e247bf14610187575b5f5ffd5b610185610180366004611360565b610361565b005b61018561019536600461139b565b6103f6565b6101856101a83660046113d9565b61047c565b6101d76101bb3660046113d9565b609860209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101d7609a5481565b6101d76102013660046113d9565b609760209081525f928352604080842090915290825290205481565b61018561022b3660046113f9565b6104fa565b61018561055c565b61018561056f565b61025361024e3660046113d9565b610624565b60405190151581526020016101e1565b60335473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e1565b6101856102b03660046113f9565b610651565b6101856102c33660046113f9565b610998565b6101856102d63660046113d9565b610a0d565b6101856102e9366004611410565b610af8565b6101856102fc3660046113f9565b610b7c565b6101d7609b5481565b6101856103183660046113f9565b610c51565b60655473ffffffffffffffffffffffffffffffffffffffff1661027d565b610185610349366004611439565b610d5c565b61025361035c3660046113f9565b610e0c565b3373ffffffffffffffffffffffffffffffffffffffff81146103cd576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b50465f908152609860209081526040808320608085013584529091529020610100909101359055565b610404620100006004611481565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461046a576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016103c4565b61047684848484610e17565b50505050565b610489618000600f611481565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104ef576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016103c4565b609a91909155609b55565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f44697361626c656420666f72207a6b73796e63206f730000000000000000000060448201526064016103c4565b610564610e81565b61056d5f610f02565b565b606554339073ffffffffffffffffffffffffffffffffffffffff168114610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084016103c4565b61062181610f02565b50565b5f61062e83610f33565b5f8481526098602090815260408083208684529091529020541490505b92915050565b5f61065a610fbb565b6040517f5f3455b5000000000000000000000000000000000000000000000000000000008152600481018490529091505f9073ffffffffffffffffffffffffffffffffffffffff831690635f3455b590602401602060405180830381865afa1580156106c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ec91906114ad565b9050468114610727576040517f7a47c9a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f97bb3ce9000000000000000000000000000000000000000000000000000000008152600481018490525f9073ffffffffffffffffffffffffffffffffffffffff8416906397bb3ce990602401602060405180830381865afa158015610792573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107b691906114c4565b90508373ffffffffffffffffffffffffffffffffffffffff8216610809576040517fda72d9950000000000000000000000000000000000000000000000000000000081526004016103c491815260200190565b505f84815260996020526040902054849060ff1615610857576040517fda4352c40000000000000000000000000000000000000000000000000000000081526004016103c491815260200190565b505f8481526099602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528316906370a0823190602401602060405180830381865afa1580156108f7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091b91906114ad565b5f848152609760209081526040808320898452909152902054909150610961907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6114df565b5f8481526097602090815260408083208984529091528120828155839290919061098c9084906114df565b90915550505050505050565b6109a0610fbb565b339073ffffffffffffffffffffffffffffffffffffffff168114610a09576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016103c4565b5050565b610a15610fbb565b339073ffffffffffffffffffffffffffffffffffffffff168114610a7e576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016103c4565b50468103610a0957610a0981835f9182526097602090815260408084209284529181528183207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905560999052902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b610b06620100006004611481565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b6c576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016103c4565b610b77838383610fcf565b505050565b610b89618000600a611481565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bef576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016103c4565b609b545f829003610bfe575050565b80610c35576040517f7e47227200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a098183609a54618000600a610c4c9190611481565b610e17565b610c5e618000600a611481565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cc4576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016103c4565b609b545f610cd6620100006004611481565b73ffffffffffffffffffffffffffffffffffffffff16635f3455b5836040518263ffffffff1660e01b8152600401610d1091815260200190565b602060405180830381865afa158015610d2b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4f91906114ad565b9050610b77828483610fcf565b610d64610e81565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155610dc760335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f61064b4683610624565b610e22848383610fea565b15610e3157610e3146856110b7565b5f610e3b46610f33565b9050610e49858285856110db565b50468303610e7a57465f9081526097602090815260408083208884529091528120805486929061098c9084906114f2565b5050505050565b60335473ffffffffffffffffffffffffffffffffffffffff16331461056d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c4565b606580547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561062181611195565b5f610f4262010000600a611481565b73ffffffffffffffffffffffffffffffffffffffff1663b2157716836040518263ffffffff1660e01b8152600401610f7c91815260200190565b602060405180830381865afa158015610f97573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064b91906114ad565b5f610fca620100006004611481565b905090565b610fd88361120b565b468103610b7757610b7746848461122e565b5f468303610ff957505f6110b0565b465f90815260986020908152604080832087845282528083205481517f18160ddd000000000000000000000000000000000000000000000000000000008152915190939273ffffffffffffffffffffffffffffffffffffffff8716926318160ddd92600480830193928290030181865afa158015611079573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109d91906114ad565b9050811580156110ab575080155b925050505b9392505050565b6110c082610f33565b5f928352609860209081526040808520938552929052912055565b5f838152609c6020908152604080832087845282528083208151808301909252805460ff1615158083526001909101549282019290925290611184576111228685856112c3565b604080518082018252600180825260208083018581525f8b8152609c83528581208d8252909252939020915182547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169015151782559151910155915061118c565b806020015191505b50949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f61121546610f33565b5050465f90815260986020908152604082209290915252565b5f838152609760209081526040808320858452909152902054811115611291576040517f07859b3b0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526064016103c4565b5f838152609760209081526040808320858452909152812080548392906112b99084906114df565b9091555050505050565b5f4683036112eb5750465f9081526097602090815260408083208684529091529020546110b0565b8173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611334573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135891906114ad565b949350505050565b5f610120828403128015611372575f5ffd5b509092915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610621575f5ffd5b5f5f5f5f608085870312156113ae575f5ffd5b84359350602085013592506040850135915060608501356113ce8161137a565b939692955090935050565b5f5f604083850312156113ea575f5ffd5b50508035926020909101359150565b5f60208284031215611409575f5ffd5b5035919050565b5f5f5f60608486031215611422575f5ffd5b505081359360208301359350604090920135919050565b5f60208284031215611449575f5ffd5b81356110b08161137a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff818116838216019081111561064b5761064b611454565b5f602082840312156114bd575f5ffd5b5051919050565b5f602082840312156114d4575f5ffd5b81516110b08161137a565b8181038181111561064b5761064b611454565b8082018082111561064b5761064b61145456fea264697066735822122076d3fc88f26dbb857e92938573238bdcdadc865226ae7fc906f0db7497c2eece64736f6c634300081c0033" ], [ "0x0000000000000000000000000000000000010010", - "0x608060405234801561000f575f5ffd5b50600436106101d1575f3560e01c806378691dce116100fe578063b704d18a1161009e578063e8eedb621161006e578063e8eedb6214610453578063f10205bb14610475578063f2fde38b14610488578063fc33c15f1461049b575f5ffd5b8063b704d18a146103fc578063c25b5c7c1461040f578063c8d5315514610422578063e30c397814610435575f5ffd5b80638da5cb5b116100d95780638da5cb5b146103a5578063a81a1197146103c3578063aa8facf7146103d6578063acb7948d146103e9575f5ffd5b806378691dce1461037757806379ba50971461038a5780637c4ed2b614610392575f5ffd5b80633345359b1161017457806365ed99121161014457806365ed9912146102ff5780636c1a5036146103225780637073c96d14610367578063715018a61461036f575f5ffd5b80633345359b1461027c57806348268a9f146102a6578063505208b4146102af5780636340bd1e146102ec575f5ffd5b80632153d9b8116101af5780632153d9b81461021057806327aff3001461022357806328a31683146102365780632f90b18414610273575f5ffd5b8063043d0488146101d55780630ff106ad146101ea5780631e7dcfdc146101fd575b5f5ffd5b6101e86101e33660046151c8565b6104ae565b005b6101e86101f83660046151e8565b6106ee565b6101e861020b3660046151ff565b610763565b6101e861021e36600461522f565b610926565b6101e8610231366004615261565b611261565b6102606102443660046151c8565b609860209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b610260609a5481565b61026061028a3660046151c8565b609760209081525f928352604080842090915290825290205481565b61026060a25481565b6102dc6102bd3660046152a3565b60a460209081525f928352604080842090915290825290205460ff1681565b604051901515815260200161026a565b6101e86102fa3660046152cd565b6112f4565b61031261030d366004615301565b6114ee565b60405161026a94939291906153bb565b60a3546103429073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161026a565b6101e861150e565b6101e86116b5565b6101e86103853660046153f9565b6116c8565b6101e8611782565b6102dc6103a03660046151c8565b611834565b60335473ffffffffffffffffffffffffffffffffffffffff16610342565b6101e86103d13660046153f9565b611861565b6101e86103e43660046151c8565b611a29565b6101e86103f73660046151e8565b611acd565b6101e861040a3660046151e8565b611b0d565b6101e861041d3660046153f9565b611cc1565b6101e86104303660046151e8565b611d86565b60655473ffffffffffffffffffffffffffffffffffffffff16610342565b610466610461366004615301565b611dfc565b60405161026a93929190615427565b6101e861048336600461544e565b611e28565b6101e861049636600461544e565b611f3d565b6102dc6104a93660046151e8565b611fed565b5f6104bd620100006002615496565b73ffffffffffffffffffffffffffffffffffffffff1663e680c4c1846040518263ffffffff1660e01b81526004016104f791815260200190565b602060405180830381865afa158015610512573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053691906154c2565b90508273ffffffffffffffffffffffffffffffffffffffff8216610592576040517f23f3c35700000000000000000000000000000000000000000000000000000000815260040161058991815260200190565b60405180910390fd5b505f61059d84611ff8565b5f85815260986020908152604080832087845290915290205490915081116105f1576040517f95bddd6c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105fd8585846120a9565b60408051610120810182527f010000000000000000000000000000000000000000000000000000000000000081525f6020808301829052888252609c81528382205473ffffffffffffffffffffffffffffffffffffffff1683850152606083018a905260808301899052888252609d81528382205460a084015260c0830185905260e0830187905289825260988152838220898352905291909120546101008201529091506106ab8161217a565b85857fe0b0dc482e9656245d513168d99abaac4295098799fb1fab517d1899110bcd5e846040516106de91815260200190565b60405180910390a3505050505050565b335f81815260a460209081526040808320858452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182528392917f915c3a485df0dc14673d70fb1a47bfdda64965b663eb1da8abeaa9654114d81091015b60405180910390a350565b3373ffffffffffffffffffffffffffffffffffffffff81146107ca576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610589565b506060810180355f908152609860209081526040808320608086013580855292529182902061010085013590556108139290916108099190850161544e565b8360a001356122a0565b61082360408201602083016154ea565b156108685760608101355f908152609760209081526040808320608085013584529091528120805460c0840135929061085d908490615505565b909155506109239050565b61087f816060013582608001358360c00135612325565b5f61088d8260600135611ff8565b60608301355f90815260a0602090815260408083208484528252808320608087013584528252918290208251808401909352805460ff1615801584526001909101549183019190915291925090610920578260c0013581602001516108f29190615518565b60608401355f90815260a0602090815260408083208684528252808320608088013584529091529020600101555b50505b50565b6040810135610939620100006002615496565b73ffffffffffffffffffffffffffffffffffffffff1663e680c4c1826040518263ffffffff1660e01b815260040161097391815260200190565b602060405180830381865afa15801561098e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b291906154c2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a18576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610589565b610a556040518060e001604052805f815260200160608152602001606081526020015f81526020015f81526020015f151581526020015f81525090565b610a6081600f6123ba565b610a8a817f72abee45b59e344af8a6e520241c4744aff26ed411f4c4b00f8af09adada43ba612462565b505f80610a97858061552b565b905090505f610aa46124ce565b73ffffffffffffffffffffffffffffffffffffffff1663e52db4ca87604001356040518263ffffffff1660e01b8152600401610ae291815260200190565b602060405180830381865afa158015610afd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b21919061558e565b90505f805b838110156110aa575f610b39898061552b565b83818110610b4957610b496155a5565b905060c00201803603810190610b5f9190615677565b90505f610b6b826124e2565b9050610b7788826125c7565b5050506180006001610b899190615496565b73ffffffffffffffffffffffffffffffffffffffff16816060015173ffffffffffffffffffffffffffffffffffffffff1603610bdb57610bd6896040013582608001518360a001516125e0565b6110a1565b610be86180006008615496565b73ffffffffffffffffffffffffffffffffffffffff16816060015173ffffffffffffffffffffffffffffffffffffffff16036110a157610c27866156fd565b9550365f610c3860208c018c615734565b610c4360018b615518565b818110610c5257610c526155a5565b9050602002810190610c649190615798565b915091508181604051610c789291906157f9565b60405180910390208360a0015114610cbc576040517f6eca2e4b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825160ff1615610cf8576040517fe1fe041e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260200151610d33576040517faca75b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4162010000600d615496565b73ffffffffffffffffffffffffffffffffffffffff165f1b836080015103610d8357610d728b6040013583836128ce565b610d7c9086615505565b945061109e565b610d9162010000600e615496565b73ffffffffffffffffffffffffffffffffffffffff165f1b836080015103610dc857610dc38b60400135838389612c1d565b61109e565b610dd5618000600a615496565b73ffffffffffffffffffffffffffffffffffffffff165f1b836080015103610e3b57610dc38b604001358784848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612fa992505050565b610e49620100006003615496565b73ffffffffffffffffffffffffffffffffffffffff165f1b836080015103610eae57610dc38b6040013583838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061307092505050565b610ebc62010000600f615496565b73ffffffffffffffffffffffffffffffffffffffff165f1b836080015103610f1c57610dc382828080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061313792505050565b610f29618000600e615496565b73ffffffffffffffffffffffffffffffffffffffff165f1b8360800151031561109e57610f596180006004615496565b73ffffffffffffffffffffffffffffffffffffffff165f1b8360800151031561109e57610f8c620100006201ffff615496565b73ffffffffffffffffffffffffffffffffffffffff1683608001515f1c116110025783610fba60018a615518565b60808501516040517fd24c490f000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610589565b6040808c01355f908152609e6020522054608084015173ffffffffffffffffffffffffffffffffffffffff9091169081148015611054575073ffffffffffffffffffffffffffffffffffffffff811615155b1561109c5761109c8c6040013584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506131e992505050565b505b50505b50600101610b26565b506110b4856132c8565b5f6110be866133f7565b90505f6110ce8960400135613483565b90508060a08a0135808214611118576040517f24ef4f8a00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610589565b50505f828a60a0013560405160200161113b929190918252602082015260400190565b6040516020818303038152906040528051906020012090508960800135811461119d576040517f0a6c1a5c0000000000000000000000000000000000000000000000000000000081526004810182905260808b01356024820152604401610589565b6111a56135b2565b604080517ffb644fc5000000000000000000000000000000000000000000000000000000008152908c0135600482015260608c013560248201526044810183905273ffffffffffffffffffffffffffffffffffffffff919091169063fb644fc5906064015f604051808303815f87803b158015611220575f5ffd5b505af1158015611232573d5f5f3e3d5ffd5b506112559250505060408b013561124f60e08d0160c08e0161544e565b866135c1565b50505050505050505050565b61126f620100006002615496565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d5576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610589565b61092381356112ea606084016040850161544e565b83602001356122a0565b61130262010000600d615496565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611368576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610589565b5f611372846136ef565b90506001818181146113b9576040517f05208b6d00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610589565b50506113c9848360800135613777565b156113dc576113dc8483608001356137bc565b6113ea848360400135613777565b156113fd576113fd8483604001356137bc565b6114118483608001358460a00135846137e0565b6114258483604001358460600135846137e0565b611447608083013561143d604085016020860161544e565b8460c001356122a0565b5f848152609b60209081526040808320868452909152902054839060f81b7fff0000000000000000000000000000000000000000000000000000000000000016156114c1576040517f7ad8c2c900000000000000000000000000000000000000000000000000000000815260040161058991815260200190565b505f848152609b60209081526040808320868452909152902082906114e68282615835565b505050505050565b5f60608060606114fe8686613887565b9299919850965090945092505050565b61151b618000600f615496565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611581576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610589565b5f611590620100006003615496565b73ffffffffffffffffffffffffffffffffffffffff1663cdf254306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fc91906154c2565b90505f611608826139ad565b80519091505f5b818110156116af57828181518110611629576116296155a5565b602002602001015160200151609e5f85848151811061164a5761164a6155a5565b6020908102919091018101515182528101919091526040015f2080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560010161160f565b50505050565b6116bd613b23565b6116c65f613ba4565b565b3373ffffffffffffffffffffffffffffffffffffffff811461172f576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610589565b505f918252609e602052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b606554339073ffffffffffffffffffffffffffffffffffffffff16811461182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610589565b61092381613ba4565b5f61183e836136ef565b5f8481526098602090815260408083208684529091529020541490505b92915050565b61186e618000600f615496565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d4576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610589565b609a8290555f6118e8620100006004615496565b73ffffffffffffffffffffffffffffffffffffffff166337d277d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611930573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195491906154c2565b905073ffffffffffffffffffffffffffffffffffffffff81166119a3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116919091179091558216611a20576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61092082613ba4565b611a31613bd5565b339073ffffffffffffffffffffffffffffffffffffffff168114611a9a576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610589565b506040517f174996d500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ad5613b23565b60a2805490829055604051829082907fe18eed6756962a3523e5026cf62d6f626d920a648e01b19c4ccfd1ea625fbf07905f90a35050565b3373ffffffffffffffffffffffffffffffffffffffff8114611b74576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610589565b505f611b7e6124ce565b73ffffffffffffffffffffffffffffffffffffffff1663e680c4c1836040518263ffffffff1660e01b8152600401611bb891815260200190565b602060405180830381865afa158015611bd3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf791906154c2565b90508173ffffffffffffffffffffffffffffffffffffffff8216611c4a576040517f23f3c35700000000000000000000000000000000000000000000000000000000815260040161058991815260200190565b506040517f3b064e4000000000000000000000000000000000000000000000000000000000815242600482015273ffffffffffffffffffffffffffffffffffffffff821690633b064e40906024015f604051808303815f87803b158015611caf575f5ffd5b505af11580156114e6573d5f5f3e3d5ffd5b611cce618000600f615496565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d34576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610589565b5f918252609e602052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b335f81815260a46020908152604080832085845282529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182528392917f915c3a485df0dc14673d70fb1a47bfdda64965b663eb1da8abeaa9654114d8109101610758565b5f806060611e0d84600481886158f6565b810190611e1a91906159b4565b919790965090945092505050565b611e30613b23565b73ffffffffffffffffffffffffffffffffffffffff8116611e7d576040517f768dc59800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a3546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611ee9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0d919061558e565b90508015611f395760a354611f399073ffffffffffffffffffffffffffffffffffffffff168383613be4565b5050565b611f45613b23565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155611fa860335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f61185b4683611834565b5f80612008620100006002615496565b73ffffffffffffffffffffffffffffffffffffffff1663671a7131846040518263ffffffff1660e01b815260040161204291815260200190565b602060405180830381865afa15801561205d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612081919061558e565b90505f61208d846136ef565b90504682036120a25761209f81615a00565b90505b9392505050565b5f83815260a060209081526040808320848452825280832085845282528083208151808301909252805460ff161515808352600190910154928201929092529061216e575f85815260976020908152604080832087845282528083205484830190815281518083018352600180825291518185019081528a865260a0855283862089875285528386208a875290945291909320905181547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690151517815590519101555b60200151949350505050565b6121876180006008615496565b73ffffffffffffffffffffffffffffffffffffffff166362f84b24826040516024016121b39190615a34565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8e29043a00000000000000000000000000000000000000000000000000000000179052517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526122609190600401615ada565b6020604051808303815f875af115801561227c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f39919061558e565b5f838152609c602052604090205473ffffffffffffffffffffffffffffffffffffffff16610920575f928352609c6020908152604080852080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9590951694909417909355609d9052912055565b5f838152609760209081526040808320858452909152902054811115612388576040517f07859b3b000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260448101829052606401610589565b5f838152609760209081526040808320858452909152812080548392906123b0908490615518565b9091555050505050565b8067ffffffffffffffff8111156123d3576123d36155d2565b6040519080825280602002602001820160405280156123fc578160200160208202803683370190505b5060208301528067ffffffffffffffff81111561241b5761241b6155d2565b604051908082528060200260200182016040528015612444578160200160208202803683370190505b506040830152505f606082018190526080820181905260a090910152565b5f80835260408301518051839190839061247e5761247e6155a5565b60200260200101818152505060018360800181815250505f5f1b83602001515f815181106124ae576124ae6155a5565b60209081029190910101525050600160608201525f60c090910181905290565b5f6124dd620100006002615496565b905090565b80516020808301516040808501516060860151608087015160a088015193515f976125aa97909695910160f896871b7fff0000000000000000000000000000000000000000000000000000000000000016815294151590951b600185015260f09290921b7fffff00000000000000000000000000000000000000000000000000000000000016600284015260601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660048301526018820152603881019190915260580190565b604051602081830303815290604052805190602001209050919050565b5f5f6125d484845f613cb8565b915091505b9250929050565b5f609b5f8581526020019081526020015f205f8481526020019081526020015f206040518060e00160405290815f82015f9054906101000a900460f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020015f820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152505090506040518060e001604052805f60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f5f1b81526020015f81526020015f5f1b81526020015f81526020015f815250609b5f8681526020019081526020015f205f8581526020019081526020015f205f820151815f015f6101000a81548160ff021916908360f81c02179055506020820151815f0160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010155606082015181600201556080820151816003015560a0820151816004015560c08201518160050155905050600160f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815f01517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161483906128a2576040517f7ad8c2c900000000000000000000000000000000000000000000000000000000815260040161058991815260200190565b50600182036128b15750505050565b60a0810151156116af576116af8482608001518360a00151612325565b5f7f010000000000000000000000000000000000000000000000000000000000000083838381612900576129006155a5565b9050013560f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461293857505f6120a2565b5f61294683600181876158f6565b8101906129539190615cea565b90505f6129a086612967866001818a6158f6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250613eee92505050565b6040808401515f90815260a16020908152828220848352905290812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560808401515191925090815b81811015612b58575f85608001518281518110612a1057612a106155a5565b602002602001015190505f81608001511115612a38576080810151612a359085615505565b93505b612a46620100006003615496565b73ffffffffffffffffffffffffffffffffffffffff16816060015173ffffffffffffffffffffffffffffffffffffffff1614612a825750612b50565b60a08101517f9c884fd10000000000000000000000000000000000000000000000000000000090612ab290615db0565b7fffffffff000000000000000000000000000000000000000000000000000000001614612b3e578060a00151612ae790615db0565b6040517f075aaa800000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610589565b612b4e8a86838960400151613f20565b505b6001016129f1565b505f612b626124ce565b73ffffffffffffffffffffffffffffffffffffffff1663e52db4ca86604001516040518263ffffffff1660e01b8152600401612ba091815260200190565b602060405180830381865afa158015612bbb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bdf919061558e565b9050612bec898285612325565b50506040838101515f90815260a1602090815282822094825293909352909120600101556080015151949350505050565b5f612c2b60048285876158f6565b612c3491615e1c565b9050807fffffffff0000000000000000000000000000000000000000000000000000000081167f743565a60000000000000000000000000000000000000000000000000000000014612cd7576040517f532a43fc0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610589565b505f612ce76024600486886158f6565b612cf091615e82565b5f87815260a16020908152604080832084845282528083208151606081018352815460f81b7fff0000000000000000000000000000000000000000000000000000000000000016815260018201548185015260028201805484518187028101870186528181529798509596919592949386019391929091879084015b82821015612daf578382905f5260205f2090600202016040518060400160405290815f820154815260200160018201548152505081526020019060010190612d6c565b50505091525050805190915082907fff00000000000000000000000000000000000000000000000000000000000000167f010000000000000000000000000000000000000000000000000000000000000014612e3a576040517ffbf8ed3500000000000000000000000000000000000000000000000000000000815260040161058991815260200190565b505f87815260a16020908152604080832085845290915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558201515190612e88896136ef565b90505f5b82811015612f6e575f84604001518281518110612eab57612eab6155a5565b6020908102919091018101518101515f8d815260a1835260408082208a835290935291822060020180549193509084908110612ee957612ee96155a5565b5f9182526020808320600292830201939093558d825260a1835260408083208a8452909352918120909101805484908110612f2657612f266155a5565b905f5260205f20906002020160010181905550612f658b86604001518481518110612f5357612f536155a5565b60200260200101515f015183866137e0565b50600101612e8c565b505f89815260a1602090815260408083208784528252822060010191909155830151612f9e908a908890846137e0565b505050505050505050565b5f5f612fb483614076565b9193509091508290507fffffffff0000000000000000000000000000000000000000000000000000000081167f6c0960f9000000000000000000000000000000000000000000000000000000001461305d576040517f532a43fc0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610589565b50613069858583612325565b5050505050565b5f5f5f61307c846140e0565b92955093509091508390507fffffffff0000000000000000000000000000000000000000000000000000000081167f9c884fd10000000000000000000000000000000000000000000000000000000014613127576040517f532a43fc0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610589565b506114e685609a5484845f614167565b5f613146826004015160e01b90565b9050807fffffffff0000000000000000000000000000000000000000000000000000000081167f8e29043a0000000000000000000000000000000000000000000000000000000014610920576040517f532a43fc0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610589565b5f5f5f6131f8609a5485614250565b91945092509050827fffffffff0000000000000000000000000000000000000000000000000000000081167f11a2ccc100000000000000000000000000000000000000000000000000000000146132a0576040517f532a43fc0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610589565b505f6132ae609a5484614326565b90506132bf86609a5483855f614167565b50505050505050565b5f8160400151600183608001516132df9190615518565b815181106132ef576132ef6155a5565b60200260200101519050815f01515f03613327578082602001515f8151811061331a5761331a6155a5565b6020026020010181815250505b5f82602001516001846060015161333e9190615518565b8151811061334e5761334e6155a5565b602002602001015190505f83602001515190505f846060015190505b818110156133d4575f9283526020849052604080842085855293209350838560400151828151811061339e5761339e6155a5565b60200260200101818152505082856020015182815181106133c1576133c16155a5565b602090810291909101015260010161336a565b50505060208201515160608301525060408101515160808201525f60a090910152565b5f8160a001511561344e575f61340c8361436d565b9050808360200151600185606001516134259190615518565b81518110613435576134356155a5565b60209081029190910101525f60a0909301929092525090565b8160200151600183606001516134649190615518565b81518110613474576134746155a5565b60200260200101519050919050565b5f818152609f6020526040812054801561349d5792915050565b6134d26040518060c001604052805f81526020015f81526020015f81526020015f815260200160608152602001606081525090565b6134dd816001614489565b613507817f46700b4d40ac5c35af2c22dda2787a91eb567b06c924a8fb8ae9a05b20c08c216146dc565b506135456040518060e001604052805f815260200160608152602001606081526020015f81526020015f81526020015f151581526020015f81525090565b6135508160016123ba565b5f61357b827f46700b4d40ac5c35af2c22dda2787a91eb567b06c924a8fb8ae9a05b20c08c21612462565b90505f613588828861478e565b90505f61359585836147cf565b5f988952609f602052604090982088905550959695505050505050565b5f6124dd620100006005615496565b60a2548115806135cf575080155b156135da5750505050565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260a46020908152604080832087845290915290205460ff16613662576040517faad86dcd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101859052604401610589565b5f61366d8383615ebe565b60a3549091506136959073ffffffffffffffffffffffffffffffffffffffff168530846149fe565b604080518281526020810185905273ffffffffffffffffffffffffffffffffffffffff86169187917ffeaae698f99c44aecbd2547d60a08be542f0664fa50c660c70a693217817b627910160405180910390a35050505050565b5f6136fe62010000600a615496565b73ffffffffffffffffffffffffffffffffffffffff1663b2157716836040518263ffffffff1660e01b815260040161373891815260200190565b602060405180830381865afa158015613753573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185b919061558e565b5f828152609860209081526040808320848452909152812054801580156137b457505f848152609760209081526040808320868452909152902054155b949350505050565b6137c5826136ef565b5f928352609860209081526040808520938552929052912055565b6137eb600282615f02565b5f0361383857806137fd816001615505565b6040517f05208b6d00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610589565b61384d8484613848600185615518565b6120a9565b5081156116af575f8481526097602090815260408083208684529091528120805484929061387c908490615505565b909155505050505050565b5f606080808484036138c5576040517f99d8fec900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86865f8181106138d8576138d86155a5565b909101357fff0000000000000000000000000000000000000000000000000000000000000016915081905061391f5761391386880188615f15565b919550935091506139a2565b7fff000000000000000000000000000000000000000000000000000000000000008181160161397057613955866001818a6158f6565b8101906139629190615f8d565b9450945094509450506139a4565b6040517f084a144900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92959194509250565b604080515f8082526020820190925260609190816139ec565b604080518082019091525f80825260208201528152602001906001900390816139c65790505b50604080515f808252602082019092529192509081613a2c565b604080518082019091525f8082526020820152815260200190600190039081613a065790505b50604080515f808252602082019092529192509081613a6c565b604080518082019091525f8082526020820152815260200190600190039081613a465790505b50905073ffffffffffffffffffffffffffffffffffffffff8516613a935750909392505050565b73ffffffffffffffffffffffffffffffffffffffff8516613ab657509392505050565b73ffffffffffffffffffffffffffffffffffffffff8516613ad957949350505050565b6040517feaa867a800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602401610589565b60335473ffffffffffffffffffffffffffffffffffffffff1633146116c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610589565b606580547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561092381614a5c565b5f6124dd620100006004615496565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109209084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614ad2565b5f5f5f60018660800151613ccc9190615518565b865190915086613cdb826156fd565b905260c0870186905292506001811b8303613da8575f86604001518281518110613d0757613d076155a5565b602002602001015190505f613d2582835f9182526020526040902090565b9050808860400151896080015181518110613d4257613d426155a5565b602002602001018181525050876080018051613d5d906156fd565b90526020880151606089015181515f9291908110613d7d57613d7d6155a5565b602002602001018181525050876060018051613d98906156fd565b9052613da3836156fd565b925050505b82855f805b848163ffffffff161015613eb7575f613dc7600286615f02565b159050808015613dd5575082155b15613e2357838b602001518363ffffffff1681518110613df757613df76155a5565b602002602001018181525050600192508815613e23575050600160a08a0152505f9350613ee692505050565b613e9c81613e54578b602001518363ffffffff1681518110613e4757613e476155a5565b6020026020010151613e56565b845b82613e6a57855f9182526020526040902090565b8c604001518463ffffffff1681518110613e8657613e866155a5565b60200260200101515f9182526020526040902090565b9350600185901c94505080613eb090616025565b9050613dad565b508189602001518581518110613ecf57613ecf6155a5565b6020908102919091010152505f60a0890152925050505b935093915050565b5f8282604051602001613f02929190616049565b60405160208183030381529060405280519060200120905092915050565b60a08201516040517fe8eedb620000000000000000000000000000000000000000000000000000000081525f9182918291309163e8eedb6291613f6591600401615ada565b5f60405180830381865afa158015613f7f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613fc491908101906160ae565b91945092509050828488821461400f576040517f203d8be500000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610589565b50505f614020888685856001614167565b60408051808201825294855260208086019283525f97885260a181528188209988529889528620600290810180546001818101835591895299909720945198029093019687555050519390910192909255505050565b600481810151825160e082901b925f92839290919060388110156140c9576040517f97e1359e00000000000000000000000000000000000000000000000000000000815260040161058991815260200190565b506014950194850151603490950151939592505050565b600481810151825160e082901b925f928392606092906044908181101561413c576040517f61cdb17e00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610589565b5050868101602081015160409182015190965094500161415c8782614bdf565b925050509193509193565b5f5f606061417485614c4a565b6040517f65ed99120000000000000000000000000000000000000000000000000000000081529197509195509093505f92503091506365ed9912906141bd908590600401615ada565b5f60405180830381865afa1580156141d7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261421c91908101906160f1565b505050905061422c818885614c76565b6142378784836122a0565b6142448989898789614cc6565b50505095945050505050565b600481810151825160e082901b925f92606092909190604c81146142a3576040517f97e1359e00000000000000000000000000000000000000000000000000000000815260040161058991815260200190565b5060148187018101515f91829190840160148a820181015191955091935090840160208a820181015192985090945050809150506143195f8388846143148e60405180602001604052805f81525060405180602001604052805f81525060405180602001604052805f815250614d0d565b614d80565b9450505050509250925092565b5f82614336620100006004615496565b60408051602081019390935273ffffffffffffffffffffffffffffffffffffffff9182169083015283166060820152608001613f02565b5f5f600183608001516143809190615518565b83519091505f81900361439657505f9392505050565b5f6143a2600183615518565b90505f6143b0600283615f02565b5f036143db5785602001515f815181106143cc576143cc6155a5565b602002602001015190506143e2565b5060c08501515b5f5b848163ffffffff16101561447f575f6143fe600285615f02565b159050614464816144325788602001518363ffffffff1681518110614425576144256155a5565b6020026020010151614434565b835b8261444857845f9182526020526040902090565b89604001518463ffffffff1681518110613e8657613e866155a5565b9250600184901c9350508061447890616025565b90506143e4565b5095945050505050565b805f036144c4576040517f039248e80000000000000000000000000000000000000000000000000000000081525f6004820152602401610589565b5f815b60018111156144f9576144d9826156fd565b915060026144e8826001615505565b6144f2919061617e565b90506144c7565b5f614505836001615505565b67ffffffffffffffff81111561451d5761451d6155d2565b60405190808252806020026020018201604052801561455057816020015b606081526020019060019003908161453b5790505b5090508367ffffffffffffffff81111561456c5761456c6155d2565b604051908082528060200260200182016040528015614595578160200160208202803683370190505b50815f815181106145a8576145a86155a5565b60209081029190910101528360015b8481116146485760026145cb836001615505565b6145d5919061617e565b91508167ffffffffffffffff8111156145f0576145f06155d2565b604051908082528060200260200182016040528015614619578160200160208202803683370190505b5083828151811061462c5761462c6155a5565b602002602001018190525080614641906156fd565b90506145b7565b505f614655856001615505565b67ffffffffffffffff81111561466d5761466d6155d2565b604051908082528060200260200182016040528015614696578160200160208202803683370190505b5060a08801819052608088018490525f808952602089015290506146bb856001615505565b60408801526146cb856001615505565b606090970196909652505050505050565b5f818360a001515f815181106146f4576146f46155a5565b602090810291909101015260808301515182905f9061471590600190615518565b905060015b818111614762575f8381526020849052604090209250828660a001518281518110614747576147476155a5565b602090810291909101015261475b816156fd565b905061471a565b5061476e816001615505565b606086015261477e816001615505565b6040860152508291505092915050565b604080517f39bc69363bb9e26cf14240de4e22569e95cf175cfbcf1ade1a47a253b4bf7f616020820152908101839052606081018290525f90608001613f02565b5f82608001515f815181106147e6576147e66155a5565b60200260200101515183602001511061485a57826020015183608001515f81518110614814576148146155a5565b6020026020010151516040517f1b582fcf000000000000000000000000000000000000000000000000000000008152600401610589929190918252602082015260400190565b6020830180515f9161486b826156fd565b905284519091506001901b810361488457835160010184525b80156149f3575f614896600183615518565b90508160015b865181116149ef576148af60028361617e565b91506148bc60028461617e565b92508183146149ef57866080015181815181106148db576148db6155a5565b6020026020010151515f0361498f5760808701516002906148fd600184615518565b8151811061490d5761490d6155a5565b602002602001015151614920919061617e565b61492b906001615505565b67ffffffffffffffff811115614943576149436155d2565b60405190808252806020026020018201604052801561496c578160200160208202803683370190505b5087608001518281518110614983576149836155a5565b60200260200101819052505b8660a0015181815181106149a5576149a56155a5565b6020026020010151876080015182815181106149c3576149c36155a5565b602002602001015183815181106149dc576149dc6155a5565b602090810291909101015260010161489c565b5050505b6137b4848285614db5565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526116af9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613c36565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f614b33826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661505d9092919063ffffffff16565b905080515f1480614b53575080806020019051810190614b539190616191565b610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610589565b60605f828451614bef9190615518565b90508067ffffffffffffffff811115614c0a57614c0a6155d2565b6040519080825280601f01601f191660200182016040528015614c34576020820181803683370190505b50915080836020018501602084015e5092915050565b5f5f5f5f606085806020019051810190614c6491906161ac565b939a9299509097509550909350915050565b5f614c818483614326565b90508083146116af576040517f1294e9e10000000000000000000000000000000000000000000000000000000081526004810182905260248101849052604401610589565b811561306957609a548514614ce057614ce0858484612325565b609a548414158015614cf0575080155b15613069575f614cff856136ef565b90506114e6858585846137e0565b6060600160f81b85858585604051602001614d2b94939291906153bb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052614d679291602001616240565b6040516020818303038152906040529050949350505050565b60608585858585604051602001614d9b959493929190616273565b604051602081830303815290604052905095945050505050565b5f5f60018560200151614dc89190615518565b905080841115614e0e576040517f1b582fcf0000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610589565b8285608001515f81518110614e2557614e256155a5565b60200260200101518581518110614e3e57614e3e6155a5565b6020908102919091010152825f5b865181101561447f57614e60600287615f02565b5f03614ec957614ec282878514614eac5788608001518381518110614e8757614e876155a5565b6020026020010151886001614e9c9190615505565b81518110613e8657613e866155a5565b8860a001518381518110613e8657613e866155a5565b9150614f21565b614f1e87608001518281518110614ee257614ee26155a5565b6020026020010151600188614ef79190615518565b81518110614f0757614f076155a5565b6020026020010151835f9182526020526040902090565b91505b614f2c60028761617e565b9550614f3960028461617e565b6080880151909350614f4c826001615505565b81518110614f5c57614f5c6155a5565b6020026020010151515f0361500f57600287608001518281518110614f8357614f836155a5565b602002602001015151614f96919061617e565b614fa1906001615505565b67ffffffffffffffff811115614fb957614fb96155d2565b604051908082528060200260200182016040528015614fe2578160200160208202803683370190505b506080880151614ff3836001615505565b81518110615003576150036155a5565b60200260200101819052505b60808701518290615021836001615505565b81518110615031576150316155a5565b6020026020010151878151811061504a5761504a6155a5565b6020908102919091010152600101614e4c565b606061209f84845f85855f5f8673ffffffffffffffffffffffffffffffffffffffff16858760405161508f91906162df565b5f6040518083038185875af1925050503d805f81146150c9576040519150601f19603f3d011682016040523d82523d5f602084013e6150ce565b606091505b50915091506150df878383876150ea565b979650505050505050565b6060831561517f5782515f036151785773ffffffffffffffffffffffffffffffffffffffff85163b615178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610589565b50816137b4565b6137b483838151156151945781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105899190615ada565b5f5f604083850312156151d9575f5ffd5b50508035926020909101359150565b5f602082840312156151f8575f5ffd5b5035919050565b5f610120828403128015615211575f5ffd5b509092915050565b5f60e08284031215615229575f5ffd5b50919050565b5f6020828403121561523f575f5ffd5b813567ffffffffffffffff811115615255575f5ffd5b6137b484828501615219565b5f6060828403128015615211575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114610923575f5ffd5b803561529e81615272565b919050565b5f5f604083850312156152b4575f5ffd5b82356152bf81615272565b946020939093013593505050565b5f5f5f61012084860312156152e0575f5ffd5b83359250602084013591506152f88560408601615219565b90509250925092565b5f5f60208385031215615312575f5ffd5b823567ffffffffffffffff811115615328575f5ffd5b8301601f81018513615338575f5ffd5b803567ffffffffffffffff81111561534e575f5ffd5b85602082840101111561535f575f5ffd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b848152608060208201525f6153d3608083018661536f565b82810360408401526153e5818661536f565b905082810360608401526150df818561536f565b5f5f6040838503121561540a575f5ffd5b82359150602083013561541c81615272565b809150509250929050565b838152826020820152606060408201525f615445606083018461536f565b95945050505050565b5f6020828403121561545e575f5ffd5b81356120a281615272565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff818116838216019081111561185b5761185b615469565b5f602082840312156154d2575f5ffd5b81516120a281615272565b8015158114610923575f5ffd5b5f602082840312156154fa575f5ffd5b81356120a2816154dd565b8082018082111561185b5761185b615469565b8181038181111561185b5761185b615469565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261555e575f5ffd5b83018035915067ffffffffffffffff821115615578575f5ffd5b602001915060c0810236038213156125d9575f5ffd5b5f6020828403121561559e575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff81118282101715615622576156226155d2565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561566f5761566f6155d2565b604052919050565b5f60c0828403128015615688575f5ffd5b506156916155ff565b823560ff811681146156a1575f5ffd5b815260208301356156b1816154dd565b6020820152604083013561ffff811681146156ca575f5ffd5b60408201526156db60608401615293565b60608201526080838101359082015260a0928301359281019290925250919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361572d5761572d615469565b5060010190565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615767575f5ffd5b83018035915067ffffffffffffffff821115615781575f5ffd5b6020019150600581901b36038213156125d9575f5ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126157cb575f5ffd5b83018035915067ffffffffffffffff8211156157e5575f5ffd5b6020019150368190038213156125d9575f5ffd5b818382375f9101908152919050565b7fff0000000000000000000000000000000000000000000000000000000000000081168114610923575f5ffd5b813561584081615808565b8060f81c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00835416178255505f602083013561587b81615272565b82547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1660089190911b74ffffffffffffffffffffffffffffffffffffffff00161782555060408201356001820155606082013560028201556080820135600382015560a0820135600482015560c090910135600590910155565b5f5f85851115615904575f5ffd5b83861115615910575f5ffd5b5050820193919092039150565b5f67ffffffffffffffff821115615936576159366155d2565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112615971575f5ffd5b813561598461597f8261591d565b615628565b818152846020838601011115615998575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f606084860312156159c6575f5ffd5b8335925060208401359150604084013567ffffffffffffffff8111156159ea575f5ffd5b6159f686828701615962565b9150509250925092565b5f81615a0e57615a0e615469565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b5f610120820190507fff0000000000000000000000000000000000000000000000000000000000000083511682526020830151151560208301526040830151615a95604084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b602081525f6120a2602083018461536f565b803561529e81615808565b5f82601f830112615b06575f5ffd5b813567ffffffffffffffff811115615b2057615b206155d2565b8060051b615b3060208201615628565b91825260208185018101929081019086841115615b4b575f5ffd5b6020860192505b83831015615c3c57823567ffffffffffffffff811115615b70575f5ffd5b860160c08189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215615ba3575f5ffd5b615bab6155ff565b6020820135615bb981615808565b81526040820135615bc9816154dd565b60208201526060820135615bdc81615272565b6040820152615bed60808301615293565b606082015260a0820135608082015260c082013567ffffffffffffffff811115615c15575f5ffd5b615c248a602083860101615962565b60a08301525083525060209283019290910190615b52565b9695505050505050565b5f60608284031215615c56575f5ffd5b6040516060810167ffffffffffffffff81118282101715615c7957615c796155d2565b604052905080823567ffffffffffffffff811115615c95575f5ffd5b615ca185828601615962565b825250602083013567ffffffffffffffff811115615cbd575f5ffd5b615cc985828601615962565b6020830152506040830135615cdd816154dd565b6040919091015292915050565b5f60208284031215615cfa575f5ffd5b813567ffffffffffffffff811115615d10575f5ffd5b820160c08185031215615d21575f5ffd5b615d296155ff565b615d3282615aec565b8152602082810135908201526040808301359082015260608083013590820152608082013567ffffffffffffffff811115615d6b575f5ffd5b615d7786828501615af7565b60808301525060a082013567ffffffffffffffff811115615d96575f5ffd5b615da286828501615c46565b60a083015250949350505050565b805160208201517fffffffff00000000000000000000000000000000000000000000000000000000811691906004821015615e15577fffffffff00000000000000000000000000000000000000000000000000000000808360040360031b1b82161692505b5050919050565b80357fffffffff000000000000000000000000000000000000000000000000000000008116906004841015615e7b577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b8035602083101561185b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b808202811582820484141761185b5761185b615469565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82615f1057615f10615ed5565b500690565b5f5f5f60608486031215615f27575f5ffd5b833567ffffffffffffffff811115615f3d575f5ffd5b615f4986828701615962565b935050602084013567ffffffffffffffff811115615f65575f5ffd5b615f7186828701615962565b925050604084013567ffffffffffffffff8111156159ea575f5ffd5b5f5f5f5f60808587031215615fa0575f5ffd5b84359350602085013567ffffffffffffffff811115615fbd575f5ffd5b615fc987828801615962565b935050604085013567ffffffffffffffff811115615fe5575f5ffd5b615ff187828801615962565b925050606085013567ffffffffffffffff81111561600d575f5ffd5b61601987828801615962565b91505092959194509250565b5f63ffffffff821663ffffffff810361604057616040615469565b60010192915050565b828152604060208201525f61209f604083018461536f565b5f82601f830112616070575f5ffd5b815161607e61597f8261591d565b818152846020838601011115616092575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f606084860312156160c0575f5ffd5b835160208501516040860151919450925067ffffffffffffffff8111156160e5575f5ffd5b6159f686828701616061565b5f5f5f5f60808587031215616104575f5ffd5b8451602086015190945067ffffffffffffffff811115616122575f5ffd5b61612e87828801616061565b935050604085015167ffffffffffffffff81111561614a575f5ffd5b61615687828801616061565b925050606085015167ffffffffffffffff811115616172575f5ffd5b61601987828801616061565b5f8261618c5761618c615ed5565b500490565b5f602082840312156161a1575f5ffd5b81516120a2816154dd565b5f5f5f5f5f60a086880312156161c0575f5ffd5b85516161cb81615272565b60208701519095506161dc81615272565b60408701519094506161ed81615272565b60608701516080880151919450925067ffffffffffffffff811115616210575f5ffd5b61621c88828901616061565b9150509295509295909350565b5f81518060208401855e5f93019283525090919050565b7fff00000000000000000000000000000000000000000000000000000000000000831681525f61209f6001830184616229565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015273ffffffffffffffffffffffffffffffffffffffff8416604082015282606082015260a060808201525f6150df60a083018461536f565b5f6120a2828461622956fea26469706673582212206cb20d55ce7b5028d732b2ef9f13dffb9b899f4103ade858acec63de460a7ccc64736f6c634300081c0033" + "0x608060405234801561000f575f5ffd5b50600436106101d1575f3560e01c806378691dce116100fe578063b704d18a1161009e578063e8eedb621161006e578063e8eedb6214610453578063f10205bb14610475578063f2fde38b14610488578063fc33c15f1461049b575f5ffd5b8063b704d18a146103fc578063c25b5c7c1461040f578063c8d5315514610422578063e30c397814610435575f5ffd5b80638da5cb5b116100d95780638da5cb5b146103a5578063a81a1197146103c3578063aa8facf7146103d6578063acb7948d146103e9575f5ffd5b806378691dce1461037757806379ba50971461038a5780637c4ed2b614610392575f5ffd5b80633345359b1161017457806365ed99121161014457806365ed9912146102ff5780636c1a5036146103225780637073c96d14610367578063715018a61461036f575f5ffd5b80633345359b1461027c57806348268a9f146102a6578063505208b4146102af5780636340bd1e146102ec575f5ffd5b80632153d9b8116101af5780632153d9b81461021057806327aff3001461022357806328a31683146102365780632f90b18414610273575f5ffd5b8063043d0488146101d55780630ff106ad146101ea5780631e7dcfdc146101fd575b5f5ffd5b6101e86101e3366004615143565b6104ae565b005b6101e86101f8366004615163565b6106ee565b6101e861020b36600461517a565b610763565b6101e861021e3660046151aa565b610926565b6101e86102313660046151dc565b611261565b610260610244366004615143565b609860209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b610260609a5481565b61026061028a366004615143565b609760209081525f928352604080842090915290825290205481565b61026060a25481565b6102dc6102bd36600461521e565b60a460209081525f928352604080842090915290825290205460ff1681565b604051901515815260200161026a565b6101e86102fa366004615248565b6112f4565b61031261030d36600461527c565b6114ee565b60405161026a9493929190615336565b60a3546103429073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161026a565b6101e861150e565b6101e86116b5565b6101e8610385366004615374565b6116c8565b6101e8611782565b6102dc6103a0366004615143565b611834565b60335473ffffffffffffffffffffffffffffffffffffffff16610342565b6101e86103d1366004615374565b611861565b6101e86103e4366004615143565b611a29565b6101e86103f7366004615163565b611acd565b6101e861040a366004615163565b611b0d565b6101e861041d366004615374565b611cc1565b6101e8610430366004615163565b611d86565b60655473ffffffffffffffffffffffffffffffffffffffff16610342565b61046661046136600461527c565b611dfc565b60405161026a939291906153a2565b6101e86104833660046153c9565b611e28565b6101e86104963660046153c9565b611f3d565b6102dc6104a9366004615163565b611fed565b5f6104bd620100006002615411565b73ffffffffffffffffffffffffffffffffffffffff1663e680c4c1846040518263ffffffff1660e01b81526004016104f791815260200190565b602060405180830381865afa158015610512573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610536919061543d565b90508273ffffffffffffffffffffffffffffffffffffffff8216610592576040517f23f3c35700000000000000000000000000000000000000000000000000000000815260040161058991815260200190565b60405180910390fd5b505f61059d84611ff8565b5f85815260986020908152604080832087845290915290205490915081116105f1576040517f95bddd6c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105fd8585846120a9565b60408051610120810182527f010000000000000000000000000000000000000000000000000000000000000081525f6020808301829052888252609c81528382205473ffffffffffffffffffffffffffffffffffffffff1683850152606083018a905260808301899052888252609d81528382205460a084015260c0830185905260e0830187905289825260988152838220898352905291909120546101008201529091506106ab8161217a565b85857fe0b0dc482e9656245d513168d99abaac4295098799fb1fab517d1899110bcd5e846040516106de91815260200190565b60405180910390a3505050505050565b335f81815260a460209081526040808320858452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182528392917f915c3a485df0dc14673d70fb1a47bfdda64965b663eb1da8abeaa9654114d81091015b60405180910390a350565b3373ffffffffffffffffffffffffffffffffffffffff81146107ca576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610589565b506060810180355f90815260986020908152604080832060808601358085529252918290206101008501359055610813929091610809919085016153c9565b8360a001356122a0565b6108236040820160208301615465565b156108685760608101355f908152609760209081526040808320608085013584529091528120805460c0840135929061085d908490615480565b909155506109239050565b61087f816060013582608001358360c00135612325565b5f61088d8260600135611ff8565b60608301355f90815260a0602090815260408083208484528252808320608087013584528252918290208251808401909352805460ff1615801584526001909101549183019190915291925090610920578260c0013581602001516108f29190615493565b60608401355f90815260a0602090815260408083208684528252808320608088013584529091529020600101555b50505b50565b6040810135610939620100006002615411565b73ffffffffffffffffffffffffffffffffffffffff1663e680c4c1826040518263ffffffff1660e01b815260040161097391815260200190565b602060405180830381865afa15801561098e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b2919061543d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a18576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610589565b610a556040518060e001604052805f815260200160608152602001606081526020015f81526020015f81526020015f151581526020015f81525090565b610a6081600f6123ba565b610a8a817f72abee45b59e344af8a6e520241c4744aff26ed411f4c4b00f8af09adada43ba612462565b505f80610a9785806154a6565b905090505f610aa46124ce565b73ffffffffffffffffffffffffffffffffffffffff1663e52db4ca87604001356040518263ffffffff1660e01b8152600401610ae291815260200190565b602060405180830381865afa158015610afd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b219190615509565b90505f805b838110156110aa575f610b3989806154a6565b83818110610b4957610b49615520565b905060c00201803603810190610b5f9190615615565b90505f610b6b826124e2565b9050610b7788826125c7565b5050506180006001610b899190615411565b73ffffffffffffffffffffffffffffffffffffffff16816060015173ffffffffffffffffffffffffffffffffffffffff1603610bdb57610bd6896040013582608001518360a001516125e0565b6110a1565b610be86180006008615411565b73ffffffffffffffffffffffffffffffffffffffff16816060015173ffffffffffffffffffffffffffffffffffffffff16036110a157610c278661569b565b9550365f610c3860208c018c6156d2565b610c4360018b615493565b818110610c5257610c52615520565b9050602002810190610c649190615736565b915091508181604051610c78929190615797565b60405180910390208360a0015114610cbc576040517f6eca2e4b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825160ff1615610cf8576040517fe1fe041e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260200151610d33576040517faca75b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4162010000600d615411565b73ffffffffffffffffffffffffffffffffffffffff165f1b836080015103610d8357610d728b6040013583836128ce565b610d7c9086615480565b945061109e565b610d9162010000600e615411565b73ffffffffffffffffffffffffffffffffffffffff165f1b836080015103610dc857610dc38b60400135838389612b98565b61109e565b610dd5618000600a615411565b73ffffffffffffffffffffffffffffffffffffffff165f1b836080015103610e3b57610dc38b604001358784848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612f2492505050565b610e49620100006003615411565b73ffffffffffffffffffffffffffffffffffffffff165f1b836080015103610eae57610dc38b6040013583838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612feb92505050565b610ebc62010000600f615411565b73ffffffffffffffffffffffffffffffffffffffff165f1b836080015103610f1c57610dc382828080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506130b292505050565b610f29618000600e615411565b73ffffffffffffffffffffffffffffffffffffffff165f1b8360800151031561109e57610f596180006004615411565b73ffffffffffffffffffffffffffffffffffffffff165f1b8360800151031561109e57610f8c620100006201ffff615411565b73ffffffffffffffffffffffffffffffffffffffff1683608001515f1c116110025783610fba60018a615493565b60808501516040517fd24c490f000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610589565b6040808c01355f908152609e6020522054608084015173ffffffffffffffffffffffffffffffffffffffff9091169081148015611054575073ffffffffffffffffffffffffffffffffffffffff811615155b1561109c5761109c8c6040013584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061316492505050565b505b50505b50600101610b26565b506110b485613243565b5f6110be86613372565b90505f6110ce89604001356133fe565b90508060a08a0135808214611118576040517f24ef4f8a00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610589565b50505f828a60a0013560405160200161113b929190918252602082015260400190565b6040516020818303038152906040528051906020012090508960800135811461119d576040517f0a6c1a5c0000000000000000000000000000000000000000000000000000000081526004810182905260808b01356024820152604401610589565b6111a561352d565b604080517ffb644fc5000000000000000000000000000000000000000000000000000000008152908c0135600482015260608c013560248201526044810183905273ffffffffffffffffffffffffffffffffffffffff919091169063fb644fc5906064015f604051808303815f87803b158015611220575f5ffd5b505af1158015611232573d5f5f3e3d5ffd5b506112559250505060408b013561124f60e08d0160c08e016153c9565b8661353c565b50505050505050505050565b61126f620100006002615411565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d5576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610589565b61092381356112ea60608401604085016153c9565b83602001356122a0565b61130262010000600d615411565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611368576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610589565b5f6113728461366a565b90506001818181146113b9576040517f05208b6d00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610589565b50506113c98483608001356136f2565b156113dc576113dc848360800135613737565b6113ea8483604001356136f2565b156113fd576113fd848360400135613737565b6114118483608001358460a001358461375b565b61142584836040013584606001358461375b565b611447608083013561143d60408501602086016153c9565b8460c001356122a0565b5f848152609b60209081526040808320868452909152902054839060f81b7fff0000000000000000000000000000000000000000000000000000000000000016156114c1576040517f7ad8c2c900000000000000000000000000000000000000000000000000000000815260040161058991815260200190565b505f848152609b60209081526040808320868452909152902082906114e682826157d3565b505050505050565b5f60608060606114fe8686613802565b9299919850965090945092505050565b61151b618000600f615411565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611581576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610589565b5f611590620100006003615411565b73ffffffffffffffffffffffffffffffffffffffff1663cdf254306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fc919061543d565b90505f61160882613928565b80519091505f5b818110156116af5782818151811061162957611629615520565b602002602001015160200151609e5f85848151811061164a5761164a615520565b6020908102919091018101515182528101919091526040015f2080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560010161160f565b50505050565b6116bd613a9e565b6116c65f613b1f565b565b3373ffffffffffffffffffffffffffffffffffffffff811461172f576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610589565b505f918252609e602052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b606554339073ffffffffffffffffffffffffffffffffffffffff16811461182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610589565b61092381613b1f565b5f61183e8361366a565b5f8481526098602090815260408083208684529091529020541490505b92915050565b61186e618000600f615411565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d4576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610589565b609a8290555f6118e8620100006004615411565b73ffffffffffffffffffffffffffffffffffffffff166337d277d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611930573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611954919061543d565b905073ffffffffffffffffffffffffffffffffffffffff81166119a3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116919091179091558216611a20576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61092082613b1f565b611a31613b50565b339073ffffffffffffffffffffffffffffffffffffffff168114611a9a576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610589565b506040517f174996d500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ad5613a9e565b60a2805490829055604051829082907fe18eed6756962a3523e5026cf62d6f626d920a648e01b19c4ccfd1ea625fbf07905f90a35050565b3373ffffffffffffffffffffffffffffffffffffffff8114611b74576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610589565b505f611b7e6124ce565b73ffffffffffffffffffffffffffffffffffffffff1663e680c4c1836040518263ffffffff1660e01b8152600401611bb891815260200190565b602060405180830381865afa158015611bd3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf7919061543d565b90508173ffffffffffffffffffffffffffffffffffffffff8216611c4a576040517f23f3c35700000000000000000000000000000000000000000000000000000000815260040161058991815260200190565b506040517f3b064e4000000000000000000000000000000000000000000000000000000000815242600482015273ffffffffffffffffffffffffffffffffffffffff821690633b064e40906024015f604051808303815f87803b158015611caf575f5ffd5b505af11580156114e6573d5f5f3e3d5ffd5b611cce618000600f615411565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d34576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610589565b5f918252609e602052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b335f81815260a46020908152604080832085845282529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182528392917f915c3a485df0dc14673d70fb1a47bfdda64965b663eb1da8abeaa9654114d8109101610758565b5f806060611e0d8460048188615894565b810190611e1a9190615952565b919790965090945092505050565b611e30613a9e565b73ffffffffffffffffffffffffffffffffffffffff8116611e7d576040517f768dc59800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a3546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611ee9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0d9190615509565b90508015611f395760a354611f399073ffffffffffffffffffffffffffffffffffffffff168383613b5f565b5050565b611f45613a9e565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155611fa860335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f61185b4683611834565b5f80612008620100006002615411565b73ffffffffffffffffffffffffffffffffffffffff1663671a7131846040518263ffffffff1660e01b815260040161204291815260200190565b602060405180830381865afa15801561205d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120819190615509565b90505f61208d8461366a565b90504682036120a25761209f8161599e565b90505b9392505050565b5f83815260a060209081526040808320848452825280832085845282528083208151808301909252805460ff161515808352600190910154928201929092529061216e575f85815260976020908152604080832087845282528083205484830190815281518083018352600180825291518185019081528a865260a0855283862089875285528386208a875290945291909320905181547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690151517815590519101555b60200151949350505050565b6121876180006008615411565b73ffffffffffffffffffffffffffffffffffffffff166362f84b24826040516024016121b391906159d2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8e29043a00000000000000000000000000000000000000000000000000000000179052517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526122609190600401615a78565b6020604051808303815f875af115801561227c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f399190615509565b5f838152609c602052604090205473ffffffffffffffffffffffffffffffffffffffff16610920575f928352609c6020908152604080852080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9590951694909417909355609d9052912055565b5f838152609760209081526040808320858452909152902054811115612388576040517f07859b3b000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260448101829052606401610589565b5f838152609760209081526040808320858452909152812080548392906123b0908490615493565b9091555050505050565b8067ffffffffffffffff8111156123d3576123d361554d565b6040519080825280602002602001820160405280156123fc578160200160208202803683370190505b5060208301528067ffffffffffffffff81111561241b5761241b61554d565b604051908082528060200260200182016040528015612444578160200160208202803683370190505b506040830152505f606082018190526080820181905260a090910152565b5f80835260408301518051839190839061247e5761247e615520565b60200260200101818152505060018360800181815250505f5f1b83602001515f815181106124ae576124ae615520565b60209081029190910101525050600160608201525f60c090910181905290565b5f6124dd620100006002615411565b905090565b80516020808301516040808501516060860151608087015160a088015193515f976125aa97909695910160f896871b7fff0000000000000000000000000000000000000000000000000000000000000016815294151590951b600185015260f09290921b7fffff00000000000000000000000000000000000000000000000000000000000016600284015260601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660048301526018820152603881019190915260580190565b604051602081830303815290604052805190602001209050919050565b5f5f6125d484845f613c33565b915091505b9250929050565b5f609b5f8581526020019081526020015f205f8481526020019081526020015f206040518060e00160405290815f82015f9054906101000a900460f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020015f820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152505090506040518060e001604052805f60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f5f1b81526020015f81526020015f5f1b81526020015f81526020015f815250609b5f8681526020019081526020015f205f8581526020019081526020015f205f820151815f015f6101000a81548160ff021916908360f81c02179055506020820151815f0160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010155606082015181600201556080820151816003015560a0820151816004015560c08201518160050155905050600160f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815f01517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161483906128a2576040517f7ad8c2c900000000000000000000000000000000000000000000000000000000815260040161058991815260200190565b50600182036128b15750505050565b60a0810151156116af576116af8482608001518360a00151612325565b5f7f01000000000000000000000000000000000000000000000000000000000000008383838161290057612900615520565b9050013560f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461293857505f6120a2565b5f6129468360018187615894565b8101906129539190615c88565b90505f6129a086612967866001818a615894565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250613e6992505050565b6040808401515f90815260a16020908152828220848352905290812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a08401515191925090815b81811015612b58575f8560a001518281518110612a1057612a10615520565b602002602001015190505f81608001511115612a38576080810151612a359085615480565b93505b612a46620100006003615411565b73ffffffffffffffffffffffffffffffffffffffff16816060015173ffffffffffffffffffffffffffffffffffffffff1614612a825750612b50565b60a08101517f9c884fd10000000000000000000000000000000000000000000000000000000090612ab290615d58565b7fffffffff000000000000000000000000000000000000000000000000000000001614612b3e578060a00151612ae790615d58565b6040517f075aaa800000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610589565b612b4e8a86838960400151613e9b565b505b6001016129f1565b50612b6888856060015184612325565b506040838101515f90815260a16020908152828220948252939093529091206001015560a0015151949350505050565b5f612ba66004828587615894565b612baf91615dc4565b9050807fffffffff0000000000000000000000000000000000000000000000000000000081167f743565a60000000000000000000000000000000000000000000000000000000014612c52576040517f532a43fc0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610589565b505f612c62602460048688615894565b612c6b91615e2a565b5f87815260a16020908152604080832084845282528083208151606081018352815460f81b7fff0000000000000000000000000000000000000000000000000000000000000016815260018201548185015260028201805484518187028101870186528181529798509596919592949386019391929091879084015b82821015612d2a578382905f5260205f2090600202016040518060400160405290815f820154815260200160018201548152505081526020019060010190612ce7565b50505091525050805190915082907fff00000000000000000000000000000000000000000000000000000000000000167f010000000000000000000000000000000000000000000000000000000000000014612db5576040517ffbf8ed3500000000000000000000000000000000000000000000000000000000815260040161058991815260200190565b505f87815260a16020908152604080832085845290915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558201515190612e038961366a565b90505f5b82811015612ee9575f84604001518281518110612e2657612e26615520565b6020908102919091018101518101515f8d815260a1835260408082208a835290935291822060020180549193509084908110612e6457612e64615520565b5f9182526020808320600292830201939093558d825260a1835260408083208a8452909352918120909101805484908110612ea157612ea1615520565b905f5260205f20906002020160010181905550612ee08b86604001518481518110612ece57612ece615520565b60200260200101515f0151838661375b565b50600101612e07565b505f89815260a1602090815260408083208784528252822060010191909155830151612f19908a9088908461375b565b505050505050505050565b5f5f612f2f83613ff1565b9193509091508290507fffffffff0000000000000000000000000000000000000000000000000000000081167f6c0960f90000000000000000000000000000000000000000000000000000000014612fd8576040517f532a43fc0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610589565b50612fe4858583612325565b5050505050565b5f5f5f612ff78461405b565b92955093509091508390507fffffffff0000000000000000000000000000000000000000000000000000000081167f9c884fd100000000000000000000000000000000000000000000000000000000146130a2576040517f532a43fc0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610589565b506114e685609a5484845f6140e2565b5f6130c1826004015160e01b90565b9050807fffffffff0000000000000000000000000000000000000000000000000000000081167f8e29043a0000000000000000000000000000000000000000000000000000000014610920576040517f532a43fc0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610589565b5f5f5f613173609a54856141cb565b91945092509050827fffffffff0000000000000000000000000000000000000000000000000000000081167f11a2ccc1000000000000000000000000000000000000000000000000000000001461321b576040517f532a43fc0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610589565b505f613229609a54846142a1565b905061323a86609a5483855f6140e2565b50505050505050565b5f81604001516001836080015161325a9190615493565b8151811061326a5761326a615520565b60200260200101519050815f01515f036132a2578082602001515f8151811061329557613295615520565b6020026020010181815250505b5f8260200151600184606001516132b99190615493565b815181106132c9576132c9615520565b602002602001015190505f83602001515190505f846060015190505b8181101561334f575f9283526020849052604080842085855293209350838560400151828151811061331957613319615520565b602002602001018181525050828560200151828151811061333c5761333c615520565b60209081029190910101526001016132e5565b50505060208201515160608301525060408101515160808201525f60a090910152565b5f8160a00151156133c9575f613387836142e8565b9050808360200151600185606001516133a09190615493565b815181106133b0576133b0615520565b60209081029190910101525f60a0909301929092525090565b8160200151600183606001516133df9190615493565b815181106133ef576133ef615520565b60200260200101519050919050565b5f818152609f602052604081205480156134185792915050565b61344d6040518060c001604052805f81526020015f81526020015f81526020015f815260200160608152602001606081525090565b613458816001614404565b613482817f46700b4d40ac5c35af2c22dda2787a91eb567b06c924a8fb8ae9a05b20c08c21614657565b506134c06040518060e001604052805f815260200160608152602001606081526020015f81526020015f81526020015f151581526020015f81525090565b6134cb8160016123ba565b5f6134f6827f46700b4d40ac5c35af2c22dda2787a91eb567b06c924a8fb8ae9a05b20c08c21612462565b90505f6135038288614709565b90505f613510858361474a565b5f988952609f602052604090982088905550959695505050505050565b5f6124dd620100006005615411565b60a25481158061354a575080155b156135555750505050565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260a46020908152604080832087845290915290205460ff166135dd576040517faad86dcd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101859052604401610589565b5f6135e88383615e66565b60a3549091506136109073ffffffffffffffffffffffffffffffffffffffff16853084614979565b604080518281526020810185905273ffffffffffffffffffffffffffffffffffffffff86169187917ffeaae698f99c44aecbd2547d60a08be542f0664fa50c660c70a693217817b627910160405180910390a35050505050565b5f61367962010000600a615411565b73ffffffffffffffffffffffffffffffffffffffff1663b2157716836040518263ffffffff1660e01b81526004016136b391815260200190565b602060405180830381865afa1580156136ce573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185b9190615509565b5f8281526098602090815260408083208484529091528120548015801561372f57505f848152609760209081526040808320868452909152902054155b949350505050565b6137408261366a565b5f928352609860209081526040808520938552929052912055565b613766600282615eaa565b5f036137b35780613778816001615480565b6040517f05208b6d00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610589565b6137c884846137c3600185615493565b6120a9565b5081156116af575f848152609760209081526040808320868452909152812080548492906137f7908490615480565b909155505050505050565b5f60608080848403613840576040517f99d8fec900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86865f81811061385357613853615520565b909101357fff0000000000000000000000000000000000000000000000000000000000000016915081905061389a5761388e86880188615ebd565b9195509350915061391d565b7fff00000000000000000000000000000000000000000000000000000000000000818116016138eb576138d0866001818a615894565b8101906138dd9190615f35565b94509450945094505061391f565b6040517f084a144900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92959194509250565b604080515f808252602082019092526060919081613967565b604080518082019091525f80825260208201528152602001906001900390816139415790505b50604080515f8082526020820190925291925090816139a7565b604080518082019091525f80825260208201528152602001906001900390816139815790505b50604080515f8082526020820190925291925090816139e7565b604080518082019091525f80825260208201528152602001906001900390816139c15790505b50905073ffffffffffffffffffffffffffffffffffffffff8516613a0e5750909392505050565b73ffffffffffffffffffffffffffffffffffffffff8516613a3157509392505050565b73ffffffffffffffffffffffffffffffffffffffff8516613a5457949350505050565b6040517feaa867a800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602401610589565b60335473ffffffffffffffffffffffffffffffffffffffff1633146116c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610589565b606580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610923816149d7565b5f6124dd620100006004615411565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109209084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614a4d565b5f5f5f60018660800151613c479190615493565b865190915086613c568261569b565b905260c0870186905292506001811b8303613d23575f86604001518281518110613c8257613c82615520565b602002602001015190505f613ca082835f9182526020526040902090565b9050808860400151896080015181518110613cbd57613cbd615520565b602002602001018181525050876080018051613cd89061569b565b90526020880151606089015181515f9291908110613cf857613cf8615520565b602002602001018181525050876060018051613d139061569b565b9052613d1e8361569b565b925050505b82855f805b848163ffffffff161015613e32575f613d42600286615eaa565b159050808015613d50575082155b15613d9e57838b602001518363ffffffff1681518110613d7257613d72615520565b602002602001018181525050600192508815613d9e575050600160a08a0152505f9350613e6192505050565b613e1781613dcf578b602001518363ffffffff1681518110613dc257613dc2615520565b6020026020010151613dd1565b845b82613de557855f9182526020526040902090565b8c604001518463ffffffff1681518110613e0157613e01615520565b60200260200101515f9182526020526040902090565b9350600185901c94505080613e2b90615fcd565b9050613d28565b508189602001518581518110613e4a57613e4a615520565b6020908102919091010152505f60a0890152925050505b935093915050565b5f8282604051602001613e7d929190615ff1565b60405160208183030381529060405280519060200120905092915050565b60a08201516040517fe8eedb620000000000000000000000000000000000000000000000000000000081525f9182918291309163e8eedb6291613ee091600401615a78565b5f60405180830381865afa158015613efa573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613f3f9190810190616056565b919450925090508284888214613f8a576040517f203d8be500000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610589565b50505f613f9b8886858560016140e2565b60408051808201825294855260208086019283525f97885260a181528188209988529889528620600290810180546001818101835591895299909720945198029093019687555050519390910192909255505050565b600481810151825160e082901b925f9283929091906038811015614044576040517f97e1359e00000000000000000000000000000000000000000000000000000000815260040161058991815260200190565b506014950194850151603490950151939592505050565b600481810151825160e082901b925f92839260609290604490818110156140b7576040517f61cdb17e00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610589565b505086810160208101516040918201519096509450016140d78782614b5a565b925050509193509193565b5f5f60606140ef85614bc5565b6040517f65ed99120000000000000000000000000000000000000000000000000000000081529197509195509093505f92503091506365ed991290614138908590600401615a78565b5f60405180830381865afa158015614152573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526141979190810190616099565b50505090506141a7818885614bf1565b6141b28784836122a0565b6141bf8989898789614c41565b50505095945050505050565b600481810151825160e082901b925f92606092909190604c811461421e576040517f97e1359e00000000000000000000000000000000000000000000000000000000815260040161058991815260200190565b5060148187018101515f91829190840160148a820181015191955091935090840160208a820181015192985090945050809150506142945f83888461428f8e60405180602001604052805f81525060405180602001604052805f81525060405180602001604052805f815250614c88565b614cfb565b9450505050509250925092565b5f826142b1620100006004615411565b60408051602081019390935273ffffffffffffffffffffffffffffffffffffffff9182169083015283166060820152608001613e7d565b5f5f600183608001516142fb9190615493565b83519091505f81900361431157505f9392505050565b5f61431d600183615493565b90505f61432b600283615eaa565b5f036143565785602001515f8151811061434757614347615520565b6020026020010151905061435d565b5060c08501515b5f5b848163ffffffff1610156143fa575f614379600285615eaa565b1590506143df816143ad5788602001518363ffffffff16815181106143a0576143a0615520565b60200260200101516143af565b835b826143c357845f9182526020526040902090565b89604001518463ffffffff1681518110613e0157613e01615520565b9250600184901c935050806143f390615fcd565b905061435f565b5095945050505050565b805f0361443f576040517f039248e80000000000000000000000000000000000000000000000000000000081525f6004820152602401610589565b5f815b6001811115614474576144548261569b565b91506002614463826001615480565b61446d9190616126565b9050614442565b5f614480836001615480565b67ffffffffffffffff8111156144985761449861554d565b6040519080825280602002602001820160405280156144cb57816020015b60608152602001906001900390816144b65790505b5090508367ffffffffffffffff8111156144e7576144e761554d565b604051908082528060200260200182016040528015614510578160200160208202803683370190505b50815f8151811061452357614523615520565b60209081029190910101528360015b8481116145c3576002614546836001615480565b6145509190616126565b91508167ffffffffffffffff81111561456b5761456b61554d565b604051908082528060200260200182016040528015614594578160200160208202803683370190505b508382815181106145a7576145a7615520565b6020026020010181905250806145bc9061569b565b9050614532565b505f6145d0856001615480565b67ffffffffffffffff8111156145e8576145e861554d565b604051908082528060200260200182016040528015614611578160200160208202803683370190505b5060a08801819052608088018490525f80895260208901529050614636856001615480565b6040880152614646856001615480565b606090970196909652505050505050565b5f818360a001515f8151811061466f5761466f615520565b602090810291909101015260808301515182905f9061469090600190615493565b905060015b8181116146dd575f8381526020849052604090209250828660a0015182815181106146c2576146c2615520565b60209081029190910101526146d68161569b565b9050614695565b506146e9816001615480565b60608601526146f9816001615480565b6040860152508291505092915050565b604080517f39bc69363bb9e26cf14240de4e22569e95cf175cfbcf1ade1a47a253b4bf7f616020820152908101839052606081018290525f90608001613e7d565b5f82608001515f8151811061476157614761615520565b6020026020010151518360200151106147d557826020015183608001515f8151811061478f5761478f615520565b6020026020010151516040517f1b582fcf000000000000000000000000000000000000000000000000000000008152600401610589929190918252602082015260400190565b6020830180515f916147e68261569b565b905284519091506001901b81036147ff57835160010184525b801561496e575f614811600183615493565b90508160015b8651811161496a5761482a600283616126565b9150614837600284616126565b925081831461496a578660800151818151811061485657614856615520565b6020026020010151515f0361490a576080870151600290614878600184615493565b8151811061488857614888615520565b60200260200101515161489b9190616126565b6148a6906001615480565b67ffffffffffffffff8111156148be576148be61554d565b6040519080825280602002602001820160405280156148e7578160200160208202803683370190505b50876080015182815181106148fe576148fe615520565b60200260200101819052505b8660a00151818151811061492057614920615520565b60200260200101518760800151828151811061493e5761493e615520565b6020026020010151838151811061495757614957615520565b6020908102919091010152600101614817565b5050505b61372f848285614d30565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526116af9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613bb1565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f614aae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614fd89092919063ffffffff16565b905080515f1480614ace575080806020019051810190614ace9190616139565b610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610589565b60605f828451614b6a9190615493565b90508067ffffffffffffffff811115614b8557614b8561554d565b6040519080825280601f01601f191660200182016040528015614baf576020820181803683370190505b50915080836020018501602084015e5092915050565b5f5f5f5f606085806020019051810190614bdf9190616154565b939a9299509097509550909350915050565b5f614bfc84836142a1565b90508083146116af576040517f1294e9e10000000000000000000000000000000000000000000000000000000081526004810182905260248101849052604401610589565b8115612fe457609a548514614c5b57614c5b858484612325565b609a548414158015614c6b575080155b15612fe4575f614c7a8561366a565b90506114e68585858461375b565b6060600160f81b85858585604051602001614ca69493929190615336565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052614ce292916020016161e8565b6040516020818303038152906040529050949350505050565b60608585858585604051602001614d1695949392919061621b565b604051602081830303815290604052905095945050505050565b5f5f60018560200151614d439190615493565b905080841115614d89576040517f1b582fcf0000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610589565b8285608001515f81518110614da057614da0615520565b60200260200101518581518110614db957614db9615520565b6020908102919091010152825f5b86518110156143fa57614ddb600287615eaa565b5f03614e4457614e3d82878514614e275788608001518381518110614e0257614e02615520565b6020026020010151886001614e179190615480565b81518110613e0157613e01615520565b8860a001518381518110613e0157613e01615520565b9150614e9c565b614e9987608001518281518110614e5d57614e5d615520565b6020026020010151600188614e729190615493565b81518110614e8257614e82615520565b6020026020010151835f9182526020526040902090565b91505b614ea7600287616126565b9550614eb4600284616126565b6080880151909350614ec7826001615480565b81518110614ed757614ed7615520565b6020026020010151515f03614f8a57600287608001518281518110614efe57614efe615520565b602002602001015151614f119190616126565b614f1c906001615480565b67ffffffffffffffff811115614f3457614f3461554d565b604051908082528060200260200182016040528015614f5d578160200160208202803683370190505b506080880151614f6e836001615480565b81518110614f7e57614f7e615520565b60200260200101819052505b60808701518290614f9c836001615480565b81518110614fac57614fac615520565b60200260200101518781518110614fc557614fc5615520565b6020908102919091010152600101614dc7565b606061209f84845f85855f5f8673ffffffffffffffffffffffffffffffffffffffff16858760405161500a9190616287565b5f6040518083038185875af1925050503d805f8114615044576040519150601f19603f3d011682016040523d82523d5f602084013e615049565b606091505b509150915061505a87838387615065565b979650505050505050565b606083156150fa5782515f036150f35773ffffffffffffffffffffffffffffffffffffffff85163b6150f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610589565b508161372f565b61372f838381511561510f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105899190615a78565b5f5f60408385031215615154575f5ffd5b50508035926020909101359150565b5f60208284031215615173575f5ffd5b5035919050565b5f61012082840312801561518c575f5ffd5b509092915050565b5f60e082840312156151a4575f5ffd5b50919050565b5f602082840312156151ba575f5ffd5b813567ffffffffffffffff8111156151d0575f5ffd5b61372f84828501615194565b5f606082840312801561518c575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114610923575f5ffd5b8035615219816151ed565b919050565b5f5f6040838503121561522f575f5ffd5b823561523a816151ed565b946020939093013593505050565b5f5f5f610120848603121561525b575f5ffd5b83359250602084013591506152738560408601615194565b90509250925092565b5f5f6020838503121561528d575f5ffd5b823567ffffffffffffffff8111156152a3575f5ffd5b8301601f810185136152b3575f5ffd5b803567ffffffffffffffff8111156152c9575f5ffd5b8560208284010111156152da575f5ffd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b848152608060208201525f61534e60808301866152ea565b828103604084015261536081866152ea565b9050828103606084015261505a81856152ea565b5f5f60408385031215615385575f5ffd5b823591506020830135615397816151ed565b809150509250929050565b838152826020820152606060408201525f6153c060608301846152ea565b95945050505050565b5f602082840312156153d9575f5ffd5b81356120a2816151ed565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff818116838216019081111561185b5761185b6153e4565b5f6020828403121561544d575f5ffd5b81516120a2816151ed565b8015158114610923575f5ffd5b5f60208284031215615475575f5ffd5b81356120a281615458565b8082018082111561185b5761185b6153e4565b8181038181111561185b5761185b6153e4565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126154d9575f5ffd5b83018035915067ffffffffffffffff8211156154f3575f5ffd5b602001915060c0810236038213156125d9575f5ffd5b5f60208284031215615519575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff8111828210171561559d5761559d61554d565b60405290565b60405160e0810167ffffffffffffffff8111828210171561559d5761559d61554d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561560d5761560d61554d565b604052919050565b5f60c0828403128015615626575f5ffd5b5061562f61557a565b823560ff8116811461563f575f5ffd5b8152602083013561564f81615458565b6020820152604083013561ffff81168114615668575f5ffd5b60408201526156796060840161520e565b60608201526080838101359082015260a0928301359281019290925250919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036156cb576156cb6153e4565b5060010190565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615705575f5ffd5b83018035915067ffffffffffffffff82111561571f575f5ffd5b6020019150600581901b36038213156125d9575f5ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615769575f5ffd5b83018035915067ffffffffffffffff821115615783575f5ffd5b6020019150368190038213156125d9575f5ffd5b818382375f9101908152919050565b7fff0000000000000000000000000000000000000000000000000000000000000081168114610923575f5ffd5b81356157de816157a6565b8060f81c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00835416178255505f6020830135615819816151ed565b82547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1660089190911b74ffffffffffffffffffffffffffffffffffffffff00161782555060408201356001820155606082013560028201556080820135600382015560a0820135600482015560c090910135600590910155565b5f5f858511156158a2575f5ffd5b838611156158ae575f5ffd5b5050820193919092039150565b5f67ffffffffffffffff8211156158d4576158d461554d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f83011261590f575f5ffd5b813561592261591d826158bb565b6155c6565b818152846020838601011115615936575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215615964575f5ffd5b8335925060208401359150604084013567ffffffffffffffff811115615988575f5ffd5b61599486828701615900565b9150509250925092565b5f816159ac576159ac6153e4565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b5f610120820190507fff0000000000000000000000000000000000000000000000000000000000000083511682526020830151151560208301526040830151615a33604084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b602081525f6120a260208301846152ea565b8035615219816157a6565b5f82601f830112615aa4575f5ffd5b813567ffffffffffffffff811115615abe57615abe61554d565b8060051b615ace602082016155c6565b91825260208185018101929081019086841115615ae9575f5ffd5b6020860192505b83831015615bda57823567ffffffffffffffff811115615b0e575f5ffd5b860160c08189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215615b41575f5ffd5b615b4961557a565b6020820135615b57816157a6565b81526040820135615b6781615458565b60208201526060820135615b7a816151ed565b6040820152615b8b6080830161520e565b606082015260a0820135608082015260c082013567ffffffffffffffff811115615bb3575f5ffd5b615bc28a602083860101615900565b60a08301525083525060209283019290910190615af0565b9695505050505050565b5f60608284031215615bf4575f5ffd5b6040516060810167ffffffffffffffff81118282101715615c1757615c1761554d565b604052905080823567ffffffffffffffff811115615c33575f5ffd5b615c3f85828601615900565b825250602083013567ffffffffffffffff811115615c5b575f5ffd5b615c6785828601615900565b6020830152506040830135615c7b81615458565b6040919091015292915050565b5f60208284031215615c98575f5ffd5b813567ffffffffffffffff811115615cae575f5ffd5b820160e08185031215615cbf575f5ffd5b615cc76155a3565b615cd082615a8a565b81526020828101359082015260408083013590820152606080830135908201526080808301359082015260a082013567ffffffffffffffff811115615d13575f5ffd5b615d1f86828501615a95565b60a08301525060c082013567ffffffffffffffff811115615d3e575f5ffd5b615d4a86828501615be4565b60c083015250949350505050565b805160208201517fffffffff00000000000000000000000000000000000000000000000000000000811691906004821015615dbd577fffffffff00000000000000000000000000000000000000000000000000000000808360040360031b1b82161692505b5050919050565b80357fffffffff000000000000000000000000000000000000000000000000000000008116906004841015615e23577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b8035602083101561185b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b808202811582820484141761185b5761185b6153e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82615eb857615eb8615e7d565b500690565b5f5f5f60608486031215615ecf575f5ffd5b833567ffffffffffffffff811115615ee5575f5ffd5b615ef186828701615900565b935050602084013567ffffffffffffffff811115615f0d575f5ffd5b615f1986828701615900565b925050604084013567ffffffffffffffff811115615988575f5ffd5b5f5f5f5f60808587031215615f48575f5ffd5b84359350602085013567ffffffffffffffff811115615f65575f5ffd5b615f7187828801615900565b935050604085013567ffffffffffffffff811115615f8d575f5ffd5b615f9987828801615900565b925050606085013567ffffffffffffffff811115615fb5575f5ffd5b615fc187828801615900565b91505092959194509250565b5f63ffffffff821663ffffffff8103615fe857615fe86153e4565b60010192915050565b828152604060208201525f61209f60408301846152ea565b5f82601f830112616018575f5ffd5b815161602661591d826158bb565b81815284602083860101111561603a575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215616068575f5ffd5b835160208501516040860151919450925067ffffffffffffffff81111561608d575f5ffd5b61599486828701616009565b5f5f5f5f608085870312156160ac575f5ffd5b8451602086015190945067ffffffffffffffff8111156160ca575f5ffd5b6160d687828801616009565b935050604085015167ffffffffffffffff8111156160f2575f5ffd5b6160fe87828801616009565b925050606085015167ffffffffffffffff81111561611a575f5ffd5b615fc187828801616009565b5f8261613457616134615e7d565b500490565b5f60208284031215616149575f5ffd5b81516120a281615458565b5f5f5f5f5f60a08688031215616168575f5ffd5b8551616173816151ed565b6020870151909550616184816151ed565b6040870151909450616195816151ed565b60608701516080880151919450925067ffffffffffffffff8111156161b8575f5ffd5b6161c488828901616009565b9150509295509295909350565b5f81518060208401855e5f93019283525090919050565b7fff00000000000000000000000000000000000000000000000000000000000000831681525f61209f60018301846161d1565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015273ffffffffffffffffffffffffffffffffffffffff8416604082015282606082015260a060808201525f61505a60a08301846152ea565b5f6120a282846161d156fea264697066735822122026493543d74856a1efd1d68b668ec72d4fdc3787a2935509c5d4e8f888aeb68f64736f6c634300081c0033" ], [ "0x000000000000000000000000000000000001000d", - "0x6080604052600436106101a4575f3560e01c8063715018a6116100e75780639e7a905811610087578063e30c397811610062578063e30c39781461048c578063e91a6391146104b6578063ede29fe5146104cb578063f2fde38b146104ea575f5ffd5b80639e7a905814610446578063cdfe7f5c1461045a578063dc680a0f1461046d575f5ffd5b80637df96ccd116100c25780637df96ccd146103b05780638456cb59146103dd5780638da5cb5b146103f15780638e26a4881461041b575f5ffd5b8063715018a61461033757806379ba50971461034b5780637d8c87aa1461035f575f5ffd5b80633f4ba83a116101525780635ef7e1041161012d5780635ef7e104146102bb5780636157f2ee146102ce57806365143424146102f957806369ce6d4714610318575f5ffd5b80633f4ba83a146102595780635c975abb1461026d5780635e4217e114610290575f5ffd5b80632d795b0a116101825780632d795b0a146102065780632f90b184146102255780633aef55ef1461023a575f5ffd5b806308273d8a146101a85780631bde8edf146101c95780632ac88e79146101f1575b5f5ffd5b3480156101b3575f5ffd5b506101c76101c23660046141f4565b610509565b005b3480156101d4575f5ffd5b506101de60cb5481565b6040519081526020015b60405180910390f35b3480156101fc575f5ffd5b506101de60cd5481565b348015610211575f5ffd5b506101c76102203660046142ff565b6105bd565b348015610230575f5ffd5b506101de60c95481565b348015610245575f5ffd5b506101c76102543660046143fe565b610917565b348015610264575f5ffd5b506101c761099c565b348015610278575f5ffd5b5060975460ff165b60405190151581526020016101e8565b34801561029b575f5ffd5b506101de6102aa36600461442c565b60ca6020525f908152604090205481565b6101de6102c93660046144cd565b6109ae565b3480156102d9575f5ffd5b506101de6102e836600461442c565b60d06020525f908152604090205481565b348015610304575f5ffd5b506101c761031336600461456c565b610da4565b348015610323575f5ffd5b506101c761033236600461442c565b610e76565b348015610342575f5ffd5b506101c7611068565b348015610356575f5ffd5b506101c7611079565b34801561036a575f5ffd5b5060ce5461038b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b3480156103bb575f5ffd5b506103cf6103ca3660046145a1565b61112e565b6040516101e8929190614689565b3480156103e8575f5ffd5b506101c7611b14565b3480156103fc575f5ffd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661038b565b348015610426575f5ffd5b506101de61043536600461442c565b60cf6020525f908152604090205481565b348015610451575f5ffd5b5061038b611b24565b6101de6104683660046146b8565b611bef565b348015610478575f5ffd5b5061028061048736600461471a565b611ea8565b348015610497575f5ffd5b5060655473ffffffffffffffffffffffffffffffffffffffff1661038b565b3480156104c1575f5ffd5b506101de60cc5481565b3480156104d6575f5ffd5b506101c76104e536600461442c565b611f38565b3480156104f5575f5ffd5b506101c761050436600461442c565b6120be565b6105166180006001614786565b339073ffffffffffffffffffffffffffffffffffffffff168114610584576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b5060cb805490829055604051829082907fcc1b3d8a497e6002e26d007570cc9177a50c5cafc22abba1ff68155b8e8806bc905f90a35050565b337311111111111111111111111111111111111111118114610624576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161057b565b505f610634620100006002614786565b73ffffffffffffffffffffffffffffffffffffffff1663e680c4c1866040518263ffffffff1660e01b815260040161066e91815260200190565b602060405180830381865afa158015610689573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ad91906147b2565b905073ffffffffffffffffffffffffffffffffffffffff81166106ff576040517f2d159f390000000000000000000000000000000000000000000000000000000081526004810186905260240161057b565b61070d620100006002614786565b73ffffffffffffffffffffffffffffffffffffffff1663e52db4ca866040518263ffffffff1660e01b815260040161074791815260200190565b602060405180830381865afa158015610762573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078691906147cd565b6040830152610799620100006010614786565b604080517f6340bd1e000000000000000000000000000000000000000000000000000000008152600481018890526024810187905284517fff00000000000000000000000000000000000000000000000000000000000000166044820152602085015173ffffffffffffffffffffffffffffffffffffffff9081166064830152918501516084820152606085015160a4820152608085015160c482015260a085015160e482015260c0850151610104820152911690636340bd1e90610124015f604051808303815f87803b15801561086f575f5ffd5b505af1158015610881573d5f5f3e3d5ffd5b50506040517fddcc9eec0000000000000000000000000000000000000000000000000000000081526004810187905267ffffffffffffffff8616602482015273ffffffffffffffffffffffffffffffffffffffff8416925063ddcc9eec91506044015f604051808303815f87803b1580156108fa575f5ffd5b505af115801561090c573d5f5f3e3d5ffd5b505050505050505050565b610924618000600f614786565b339073ffffffffffffffffffffffffffffffffffffffff16811461098d576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161057b565b50610998828261216e565b5050565b6109a46121d5565b6109ac612256565b565b5f6109b76122d4565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f819003610a13576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018114610a4d576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455610a7b8888612341565b5f610a868989612462565b509050610a92816124bb565b5f8667ffffffffffffffff811115610aac57610aac61420b565b604051908082528060200260200182016040528015610b1257816020015b610aff60408051606080820183525f808352602080840183905284519283018552818352820181905281840152909182015290565b815260200190600190039081610aca5790505b509050865f8167ffffffffffffffff811115610b3057610b3061420b565b604051908082528060200260200182016040528015610b6357816020015b6060815260200190600190039081610b4e5790505b5090505f5b82811015610d3657610ba68b8b83818110610b8557610b856147e4565b9050602002810190610b979190614811565b610ba1908061484d565b612512565b5f610bdd8c8c84818110610bbc57610bbc6147e4565b9050602002810190610bce9190614811565b610bd8908061484d565b612462565b9150508b8b83818110610bf257610bf26147e4565b9050602002810190610c049190614811565b610c129060408101906148ae565b610c1b916149cc565b838381518110610c2d57610c2d6147e4565b60200260200101819052505f610c758d8d85818110610c4e57610c4e6147e4565b9050602002810190610c609190614811565b610c6e9060408101906148ae565b600161112e565b50905060405180606001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020018e8e86818110610cb157610cb16147e4565b9050602002810190610cc39190614811565b610cd190602081019061484d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018290528651879085908110610d2157610d216147e4565b60209081029190910101525050600101610b68565b505f610d448989600261112e565b9150508060200151515f03610d6357610d5d46336125b6565b60208201525b610d6f85858385612618565b60017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4559d9c50505050505050505050505050565b610dac612b7f565b610db9618000600f614786565b339073ffffffffffffffffffffffffffffffffffffffff168114610e22576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161057b565b50610e2b612bdf565b80610e62576040517f9219606900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60cd819055610e71838361216e565b505050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f819003610ed2576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018114610f0c576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455335f90815260cf602052604081205490819003610f4d5750611040565b335f90815260cf60205260408082208290555173ffffffffffffffffffffffffffffffffffffffff85169083908381818185875af1925050503d805f8114610fb0576040519150601f19603f3d011682016040523d82523d5f602084013e610fb5565b606091505b5050905080610ff0576040517f16b0fa0000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405182815273ffffffffffffffffffffffffffffffffffffffff85169033907f4f8a50ec1fe3d316970fdadd1f94e0b822f92d31e2bac3c9dc2c6c287de071079060200160405180910390a350505b60017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4555050565b6110706121d5565b6109ac5f612cdf565b606554339073ffffffffffffffffffffffffffffffffffffffff168114611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e65720000000000000000000000000000000000000000000000606482015260840161057b565b61112b81612cdf565b50565b61115160405180606001604052805f81526020015f151581526020015f81525090565b604080516060808201835280825260208201525f918101919091525f6020830181905261117c612d10565b60408051600580825260c082019092529192505f91906020820160a080368337019050509050855f5b81811015611b08575f8989838181106111c0576111c06147e4565b90506020028101906111d2919061484d565b6111db91614a3a565b90507fab4e9ad7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016113b957835f81518110611238576112386147e4565b602002602001015115819061129e576040517f9031f7510000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000909116600482015260240161057b565b505f8860038111156112b2576112b2614aa0565b14806112cf575060018860038111156112cd576112cd614aa0565b145b806112eb575060038860038111156112e9576112e9614aa0565b145b818960038111156112fe576112fe614aa0565b9091611360576040517fbcb41ec70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009092166004830152602482015260440161057b565b50506001845f81518110611376576113766147e4565b911515602092830291909101909101526113b28a8a8481811061139b5761139b6147e4565b90506020028101906113ad919061484d565b612de3565b8752611aff565b7f37b69159000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160161156d5783600181518110611415576114156147e4565b602002602001015115819061147b576040517f9031f7510000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000909116600482015260240161057b565b50600188600381111561149057611490614aa0565b14806114ad575060038860038111156114ab576114ab614aa0565b145b818960038111156114c0576114c0614aa0565b9091611522576040517fbcb41ec70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009092166004830152602482015260440161057b565b5050600184600181518110611539576115396147e4565b9115156020928302919091018201526001908801526115638a8a8481811061139b5761139b6147e4565b6040880152611aff565b7ffab3fce5000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160161173057836002815181106115c9576115c96147e4565b602002602001015115819061162f576040517f9031f7510000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000909116600482015260240161057b565b50600288600381111561164457611644614aa0565b14806116615750600388600381111561165f5761165f614aa0565b145b8189600381111561167457611674614aa0565b90916116d6576040517fbcb41ec70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009092166004830152602482015260440161057b565b50506001846002815181106116ed576116ed6147e4565b911515602092830291909101909101526117298a8a84818110611712576117126147e4565b9050602002810190611724919061484d565b612e05565b8652611aff565b7f46379968000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016118df578360038151811061178c5761178c6147e4565b60200260200101511581906117f2576040517f9031f7510000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000909116600482015260240161057b565b50600288600381111561180757611807614aa0565b14806118245750600388600381111561182257611822614aa0565b145b8189600381111561183757611837614aa0565b9091611899576040517fbcb41ec70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009092166004830152602482015260440161057b565b50506001846003815181106118b0576118b06147e4565b911515602092830291909101909101526118d58a8a84818110611712576117126147e4565b6020870152611aff565b7f047f6e77000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601611aa9578360048151811061193b5761193b6147e4565b60200260200101511581906119a1576040517f9031f7510000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000909116600482015260240161057b565b5060028860038111156119b6576119b6614aa0565b14806119d3575060038860038111156119d1576119d1614aa0565b145b818960038111156119e6576119e6614aa0565b9091611a48576040517fbcb41ec70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009092166004830152602482015260440161057b565b5050600184600481518110611a5f57611a5f6147e4565b911515602092830291909101909101525f611a9c8b8b85818110611a8557611a856147e4565b9050602002810190611a97919061484d565b612e21565b1515604088015250611aff565b6040517fe1c9e4790000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008216600482015260240161057b565b506001016111a5565b50505050935093915050565b611b1c6121d5565b6109ac612e3c565b60ce545f9073ffffffffffffffffffffffffffffffffffffffff1615611b61575060ce5473ffffffffffffffffffffffffffffffffffffffff1690565b611b6f620100006004614786565b73ffffffffffffffffffffffffffffffffffffffff166397bb3ce960cd546040518263ffffffff1660e01b8152600401611bab91815260200190565b602060405180830381865afa158015611bc6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bea91906147b2565b905090565b5f611bf86122d4565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f819003611c54576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018114611c8e576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4555f5f611cbe8a8a612462565b91509150611ccb826124bb565b5f5f611cd98888600361112e565b915091508060200151515f03611cf957611cf346336125b6565b60208201525b6040805160018082528183019092525f91816020015b611d4460408051606080820183525f808352602080840183905284519283018552818352820181905281840152909182015290565b815260200190600190039081611d0f57905050905060405180606001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020018c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250505060209091018590528251839190611dd057611dd06147e4565b60209081029190910101526040805160018082528183019092525f91816020015b6060815260200190600190039081611df1579050509050611e12898b6149cc565b815f81518110611e2457611e246147e4565b60200260200101819052505f611e3c87848685612618565b9050805f604051602001611e5a929190918252602082015260400190565b6040516020818303038152906040528051906020012098505050505050505060017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455509695505050505050565b5f5f611eb2612d10565b905060055f5b81811015611f2e57828160058110611ed257611ed26147e4565b60200201517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603611f2657506001949350505050565b600101611eb8565b505f949350505050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f819003611f94576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018114611fce576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455335f90815260d060205260408120549081900361200f5750611040565b335f90815260d06020526040812055612048838261202b612e97565b73ffffffffffffffffffffffffffffffffffffffff169190612f53565b60405181815273ffffffffffffffffffffffffffffffffffffffff84169033907fa110ebf89b526305714adcef557c32d5a6cb285fecfe646c16c985d9b494e9ab9060200160405180910390a35060017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4555050565b6120c66121d5565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561212960335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b73ffffffffffffffffffffffffffffffffffffffff81166121bb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c9829055678ac7230489e8000060cc5561099881612cdf565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161057b565b61225e613027565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390a1565b60975460ff16156109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161057b565b81816005811015612380576040517fe7c8d4cf00000000000000000000000000000000000000000000000000000000815260040161057b929190614acd565b50505f82826004818110612396576123966147e4565b919091013560f81c91506123ad9050816006614b19565b8390839060ff168110156123ef576040517fe7c8d4cf00000000000000000000000000000000000000000000000000000000815260040161057b929190614acd565b505f90508383612400846005614b19565b60ff16818110612412576124126147e4565b919091013560f81c915084905083821561245a576040517f884f49ba00000000000000000000000000000000000000000000000000000000815260040161057b929190614acd565b505050505050565b5f5f5f61246f8585613093565b909450925090508484826124b1576040517fe7c8d4cf00000000000000000000000000000000000000000000000000000000815260040161057b929190614acd565b5050509250929050565b4660c954141580156124cf575060c9548114155b46829091610e71576040517fc5441a630000000000000000000000000000000000000000000000000000000081526004810192909252602482015260440161057b565b81816005811015612551576040517fe7c8d4cf00000000000000000000000000000000000000000000000000000000815260040161057b929190614acd565b50505f82826004818110612567576125676147e4565b919091013560f81c91508390508282156125af576040517ffe8b1b1600000000000000000000000000000000000000000000000000000000815260040161057b929190614acd565b5050505050565b60605f6125c284613151565b80516040519192506125ff917e01000000000000000000000000000000000000000000000000000000000000919084906014908890602001614b49565b6040516020818303038152906040529150505b92915050565b6040805160c0810182527f0100000000000000000000000000000000000000000000000000000000000000815246602080830191909152818301879052335f81815260ca83528481205494517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b1693810193909352603483019490945283929190820190605401604051602081830303815290604052805190602001208152602001865167ffffffffffffffff8111156126d9576126d961420b565b60405190808252806020026020018201604052801561275857816020015b6040805160c0810182525f80825260208083018290529282018190526060808301829052608083019190915260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816126f75790505b5081526020908101869052335f90815260ca9091526040812080549293509161278090614c07565b9091555084515f908190815b8181101561286b575f6127b98a83815181106127aa576127aa6147e4565b60200260200101518c336131b0565b905080866080015183815181106127d2576127d26147e4565b60200260200101819052508982815181106127ef576127ef6147e4565b6020026020010151604001515f0151856128099190614c3e565b945089828151811061281d5761281d6147e4565b602002602001015160400151602001511561286257898281518110612844576128446147e4565b602002602001015160400151604001518461285f9190614c3e565b93505b5060010161278c565b5086604001511561290f575f8160cc546128859190614c51565b90506128b3333083612895612e97565b73ffffffffffffffffffffffffffffffffffffffff169291906134b3565b415f90815260d06020526040812080548392906128d1908490614c3e565b9091555050604051818152419033907f72dac9025dcab5f2fd6d18a6a449e176e61b833a67bebc3e0199d6d83e98251d9060200160405180910390a3505b612924846040015184848a6040015185613517565b5f5f856040516020016129379190614dde565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506129746180006008614786565b73ffffffffffffffffffffffffffffffffffffffff166362f84b24600160f81b836040516020016129a6929190614df0565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016129d19190614e23565b6020604051808303815f875af11580156129ed573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a1191906147cd565b9150612a1d46826138f4565b96505f90505b82811015612b36575f86608001518281518110612a4257612a426147e4565b602002602001015190508782604051602001612a68929190918252602082015260400190565b604051602081830303815290604052805190602001207f7446eaa0a0dda80670b3bfe972bfbefab659bcfb67abad4e0b64dc4630a70481612aad4684606001516125b6565b612abb8f85604001516125b6565b8e8681518110612acd57612acd6147e4565b6020026020010151602001518f8781518110612aeb57612aeb6147e4565b6020026020010151604001515f01518e8881518110612b0c57612b0c6147e4565b6020026020010151604051612b25959493929190614ead565b60405180910390a250600101612a23565b507fa806bc0307d327c1421b432282433def78085db185d404fcd809931f28b1c4ab818787604051612b6a93929190614f0b565b60405180910390a15050505050949350505050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf480546001909155801561112b576040517fdf3a8fdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615612c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960448201527f616c697a696e6700000000000000000000000000000000000000000000000000606482015260840161057b565b5f5460ff908116146109ac575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016122ca565b606580547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561112b81613926565b612d186141d6565b506040805160a0810182527f54b165290000000000000000000000000000000000000000000000000000000081527fc8496ea70000000000000000000000000000000000000000000000000000000060208201527f054c031b00000000000000000000000000000000000000000000000000000000918101919091527fb9c866980000000000000000000000000000000000000000000000000000000060608201527ffb80918900000000000000000000000000000000000000000000000000000000608082015290565b5f612df18260048186614f29565b810190612dfe91906141f4565b9392505050565b6060612e148260048186614f29565b810190612dfe9190614f50565b5f612e2f8260048186614f29565b810190612dfe9190614f8f565b612e446122d4565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122a93390565b5f5f612ea1611b24565b905073ffffffffffffffffffffffffffffffffffffffff8116612ef0576040517f9219606900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ce5473ffffffffffffffffffffffffffffffffffffffff16612f4e5760ce80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b919050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610e719084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261399c565b60975460ff166109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161057b565b5f5f5f5f5f365f365f6130a68b8b613aa9565b9550955095509550955095508580156130df57507fffff0000000000000000000000000000000000000000000000000000000000008516155b80156130eb5750602183105b80156130ff57508015806130ff5750601481145b61310b575f5f5f61313e565b6001613118846008614c51565b61312490610100614faa565b61312e8587614fbd565b901c61313a8385614ff9565b60601c5b9850985098505050505050509250925092565b60605f61315d83613c33565b6001019050612dfe816020038460405160200161317c91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290613c9c565b6040805160c0810182525f808252602082018190529181018290526060808201839052608082019290925260a081019190915283516040850151602001511561343b57604080860151808201519051602088015192517f4d7e3d620000000000000000000000000000000000000000000000000000000081525f9373ffffffffffffffffffffffffffffffffffffffff861693634d7e3d6293909261325e928b928b9290919060040161505e565b5f6040518083038185885af1158015613279573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526132bf91908101906150ef565b60408082015190517f7df96ccd0000000000000000000000000000000000000000000000000000000081529192505f913091637df96ccd916133069190859060040161522c565b5f60405180830381865afa158015613320573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526133659190810190615282565b5080516040890151519192508181146133b3576040517f62d214aa0000000000000000000000000000000000000000000000000000000081526004810192909252602482015260440161057b565b50505f6133c2835f0151613caa565b6040805160c0810182527f010000000000000000000000000000000000000000000000000000000000000081525f60208083019190915273ffffffffffffffffffffffffffffffffffffffff938416828401529288166060820152908b015151608082015294015160a0850152509193506134ab915050565b6040805160c0810182527f010000000000000000000000000000000000000000000000000000000000000081525f60208083019190915273ffffffffffffffffffffffffffffffffffffffff8085168385015286166060830152918701515160808201529086015160a082015291505b509392505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526135119085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612fa5565b50505050565b5f613526620100006002614786565b73ffffffffffffffffffffffffffffffffffffffff1663e52db4ca876040518263ffffffff1660e01b815260040161356091815260200190565b602060405180830381865afa15801561357b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061359f91906147cd565b905085816135dc576040517f2d159f3900000000000000000000000000000000000000000000000000000000815260040161057b91815260200190565b505f6135ec620100006002614786565b6040517fe52db4ca00000000000000000000000000000000000000000000000000000000815246600482015273ffffffffffffffffffffffffffffffffffffffff919091169063e52db4ca90602401602060405180830381865afa158015613656573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061367a91906147cd565b90505f84613695578360cb546136909190614c51565b613697565b5f5b905046826136d4576040517f95eb760300000000000000000000000000000000000000000000000000000000815260040161057b91815260200190565b50818303613790575f816136e8888a614c3e565b6136f29190614c3e565b90508034808214613738576040517f4a0944310000000000000000000000000000000000000000000000000000000081526004810192909252602482015260440161057b565b5050871561378a5760405163deadbeef9089905f81818185875af1925050503d805f8114613781576040519150601f19603f3d011682016040523d82523d5f602084013e613786565b606091505b5050505b5061388b565b5f61379b8288614c3e565b905080348082146137e1576040517f4a0944310000000000000000000000000000000000000000000000000000000081526004810192909252602482015260440161057b565b50508715613889576137f7620100006003614786565b6040517fc4879440000000000000000000000000000000000000000000000000000000008152600481018b905260248101869052336044820152606481018a905273ffffffffffffffffffffffffffffffffffffffff919091169063c4879440906084015f604051808303815f87803b158015613872575f5ffd5b505af1158015613884573d5f5f3e3d5ffd5b505050505b505b80156138ea57415f90815260cf6020526040812080548392906138af908490614c3e565b909155505060405181815241907fd971d38da489e0daf6015ede73e6fad2c46ff4bba3641491a60dd6f25ae452b99060200160405180910390a25b5050505050505050565b5f8282604051602001613908929190615372565b60405160208183030381529060405280519060200120905092915050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6139fd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613cfd9092919063ffffffff16565b905080515f1480613a1d575080806020019051810190613a1d919061538a565b610e71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161057b565b60015f368181816006871015613acf57505f945084935083925082915081905080613c29565b7fffff0000000000000000000000000000000000000000000000000000000000008835167e010000000000000000000000000000000000000000000000000000000000008114613b3157505f9550859450849350839250829150819050613c29565b60028901357fffff0000000000000000000000000000000000000000000000000000000000001695505f89896004818110613b6e57613b6e6147e4565b919091013560f81c9150506006810160ff16891015613ba157505f9650869550859450849350839250829150613c299050565b613bb4600582810160ff16908b8d614f29565b955095505f8a8a8360050160ff16818110613bd157613bd16147e4565b919091013560f81c91505081810160060160ff168a1015613c0757505f9750879650869550859450849350839250613c29915050565b613c2160ff60068484018101821691908501168c8e614f29565b945094505050505b9295509295509295565b5f80608083901c15613c4a5760809290921c916010015b604083901c15613c5f5760409290921c916008015b602083901c15613c745760209290921c916004015b601083901c15613c895760109290921c916002015b600883901c156126125760010192915050565b6060612dfe83838551613d13565b5f5f5f613cb684613d97565b909450925090508381613cf6576040517fe7c8d4cf00000000000000000000000000000000000000000000000000000000815260040161057b9190614e23565b5050915091565b6060613d0b84845f85613e50565b949350505050565b8251606090613d228382613f65565b9250613d2e8484613f65565b93505f613d3b8585614faa565b67ffffffffffffffff811115613d5357613d5361420b565b6040519080825280601f01601f191660200182016040528015613d7d576020820181803683370190505b509050848403856020880101602083015e95945050505050565b5f5f5f5f5f5f5f613da788613f7a565b9350935093509350838015613ddc57507fffff0000000000000000000000000000000000000000000000000000000000008316155b8015613de9575060218251105b8015613dff575080511580613dff575080516014145b613e0b575f5f5f613e3f565b600182516008613e1b9190614c51565b613e2790610100614faa565b613e30846153a5565b901c613e3b836153ea565b60601c5b965096509650505050509193909250565b606082471015613ee2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161057b565b5f5f8673ffffffffffffffffffffffffffffffffffffffff168587604051613f0a9190615456565b5f6040518083038185875af1925050503d805f8114613f44576040519150601f19603f3d011682016040523d82523d5f602084013e613f49565b606091505b5091509150613f5a878383876140f8565b979650505050505050565b5f818310613f735781612dfe565b5090919050565b5f5f60608060019350600685511015613f9e57505f925082915060609050806140f1565b60208501517fffff000000000000000000000000000000000000000000000000000000000000167e010000000000000000000000000000000000000000000000000000000000008114613ffe57505f9350839250606091508190506140f1565b60228601517fffff0000000000000000000000000000000000000000000000000000000000001693505f8660048151811061403b5761403b6147e4565b602001015160f81c60f81b60f81c90508060060160ff168751101561406f57505f9450849350606092508291506140f19050565b61408087600560ff84820116613d13565b93505f878260050160ff168151811061409b5761409b6147e4565b602001015160f81c60f81b60f81c905080826006010160ff16885110156140d257505f9550859450606093508392506140f1915050565b6140eb88600684810160ff908116918587010116613d13565b93505050505b9193509193565b6060831561418d5782515f036141865773ffffffffffffffffffffffffffffffffffffffff85163b614186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161057b565b5081613d0b565b613d0b83838151156141a25781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057b9190614e23565b6040518060a001604052806005906020820280368337509192915050565b5f60208284031215614204575f5ffd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff8111828210171561425b5761425b61420b565b60405290565b6040516060810167ffffffffffffffff8111828210171561425b5761425b61420b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156142cb576142cb61420b565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461112b575f5ffd5b8035612f4e816142d3565b5f5f5f5f848603610140811215614314575f5ffd5b8535945060208601359350604086013567ffffffffffffffff81168114614339575f5ffd5b925060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08201121561436a575f5ffd5b50614373614238565b60608601357fff00000000000000000000000000000000000000000000000000000000000000811681146143a5575f5ffd5b81526143b3608087016142f4565b602082015260a086810135604083015260c080880135606084015260e08801356080840152610100880135918301919091526101209096013595810195909552509194909350909190565b5f5f6040838503121561440f575f5ffd5b823591506020830135614421816142d3565b809150509250929050565b5f6020828403121561443c575f5ffd5b8135612dfe816142d3565b5f5f83601f840112614457575f5ffd5b50813567ffffffffffffffff81111561446e575f5ffd5b602083019150836020828501011115614485575f5ffd5b9250929050565b5f5f83601f84011261449c575f5ffd5b50813567ffffffffffffffff8111156144b3575f5ffd5b6020830191508360208260051b8501011115614485575f5ffd5b5f5f5f5f5f5f606087890312156144e2575f5ffd5b863567ffffffffffffffff8111156144f8575f5ffd5b61450489828a01614447565b909750955050602087013567ffffffffffffffff811115614523575f5ffd5b61452f89828a0161448c565b909550935050604087013567ffffffffffffffff81111561454e575f5ffd5b61455a89828a0161448c565b979a9699509497509295939492505050565b5f5f5f6060848603121561457e575f5ffd5b833592506020840135614590816142d3565b929592945050506040919091013590565b5f5f5f604084860312156145b3575f5ffd5b833567ffffffffffffffff8111156145c9575f5ffd5b6145d58682870161448c565b9094509250506020840135600481106145ec575f5ffd5b809150509250925092565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f81516060845261465760608501826145f7565b90506020830151848203602086015261467082826145f7565b9150506040830151151560408501528091505092915050565b8251815260208301511515602082015260408301516040820152608060608201525f613d0b6080830184614643565b5f5f5f5f5f5f606087890312156146cd575f5ffd5b863567ffffffffffffffff8111156146e3575f5ffd5b6146ef89828a01614447565b909750955050602087013567ffffffffffffffff81111561470e575f5ffd5b61452f89828a01614447565b5f6020828403121561472a575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612dfe575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff818116838216019081111561261257612612614759565b5f602082840312156147c2575f5ffd5b8151612dfe816142d3565b5f602082840312156147dd575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614843575f5ffd5b9190910192915050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614880575f5ffd5b83018035915067ffffffffffffffff82111561489a575f5ffd5b602001915036819003821315614485575f5ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126148e1575f5ffd5b83018035915067ffffffffffffffff8211156148fb575f5ffd5b6020019150600581901b3603821315614485575f5ffd5b5f67ffffffffffffffff82111561492b5761492b61420b565b5060051b60200190565b5f67ffffffffffffffff82111561494e5761494e61420b565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112614989575f5ffd5b813561499c61499782614935565b614284565b8181528460208386010111156149b0575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f6149d961499784614912565b8381526020810190600585901b8401368111156149f4575f5ffd5b845b81811015614a2f57803567ffffffffffffffff811115614a14575f5ffd5b614a203682890161497a565b855250602093840193016149f6565b509095945050505050565b80357fffffffff000000000000000000000000000000000000000000000000000000008116906004841015614a99577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b60ff818116838216019081111561261257612612614759565b5f81518060208401855e5f93019283525090919050565b7fffffffff00000000000000000000000000000000000000000000000000000000861681527fff000000000000000000000000000000000000000000000000000000000000008560f81b1660048201525f614ba76005830186614b32565b60f89490941b7fff00000000000000000000000000000000000000000000000000000000000000168452505060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018201526015019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c3757614c37614759565b5060010190565b8082018082111561261257612612614759565b808202811582820484141761261257612612614759565b5f60c083017fff000000000000000000000000000000000000000000000000000000000000008351168452602083015160208501526040830151604085015260608301516060850152608083015160c0608086015281815180845260e08701915060e08160051b88010193506020830192505f5b81811015614dba577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2088860301835283517fff00000000000000000000000000000000000000000000000000000000000000815116865260208101511515602087015273ffffffffffffffffffffffffffffffffffffffff604082015116604087015273ffffffffffffffffffffffffffffffffffffffff60608201511660608701526080810151608087015260a0810151905060c060a0870152614da460c08701826145f7565b9550506020938401939290920191600101614cdc565b5050505060a083015184820360a0860152614dd58282614643565b95945050505050565b602081525f612dfe6020830184614c68565b7fff00000000000000000000000000000000000000000000000000000000000000831681525f613d0b6001830184614b32565b602081525f612dfe60208301846145f7565b5f82825180855260208501945060208160051b830101602085015f5b83811015614ea1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0858403018852614e8b8383516145f7565b6020988901989093509190910190600101614e51565b50909695505050505050565b60a081525f614ebf60a08301886145f7565b8281036020840152614ed181886145f7565b90508281036040840152614ee581876145f7565b90508460608401528281036080840152614eff8185614e35565b98975050505050505050565b838152826020820152606060408201525f614dd56060830184614c68565b5f5f85851115614f37575f5ffd5b83861115614f43575f5ffd5b5050820193919092039150565b5f60208284031215614f60575f5ffd5b813567ffffffffffffffff811115614f76575f5ffd5b613d0b8482850161497a565b801515811461112b575f5ffd5b5f60208284031215614f9f575f5ffd5b8135612dfe81614f82565b8181038181111561261257612612614759565b80356020831015612612577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116906014841015614a99577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808560140360031b1b82161691505092915050565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201525f61509860808301846145f7565b9695505050505050565b5f82601f8301126150b1575f5ffd5b81516150bf61499782614935565b8181528460208386010111156150d3575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f602082840312156150ff575f5ffd5b815167ffffffffffffffff811115615115575f5ffd5b820160608185031215615126575f5ffd5b61512e614261565b815167ffffffffffffffff811115615144575f5ffd5b615150868285016150a2565b825250602082015167ffffffffffffffff81111561516c575f5ffd5b615178868285016150a2565b602083015250604082015167ffffffffffffffff811115615197575f5ffd5b80830192505084601f8301126151ab575f5ffd5b81516151b961499782614912565b8082825260208201915060208360051b8601019250878311156151da575f5ffd5b602085015b8381101561521b57805167ffffffffffffffff8111156151fd575f5ffd5b61520c8a6020838a01016150a2565b845250602092830192016151df565b506040840152509095945050505050565b604081525f61523e6040830185614e35565b905060048310615275577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8260208301529392505050565b5f5f8284036080811215615294575f5ffd5b60608112156152a1575f5ffd5b506152aa614261565b8351815260208401516152bc81614f82565b602082015260408481015190820152606084015190925067ffffffffffffffff8111156152e7575f5ffd5b8301606081860312156152f8575f5ffd5b615300614261565b815167ffffffffffffffff811115615316575f5ffd5b615322878285016150a2565b825250602082015167ffffffffffffffff81111561533e575f5ffd5b61534a878285016150a2565b6020830152506040820151915061536082614f82565b81604082015280925050509250929050565b828152604060208201525f613d0b60408301846145f7565b5f6020828403121561539a575f5ffd5b8151612dfe81614f82565b805160208083015191908110156153e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b805160208201517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081169190601482101561544f577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808360140360031b1b82161692505b5050919050565b5f612dfe8284614b3256fea264697066735822122078499cd551e1d1347fd2226b6e4b4808eb50f66fedb21baada01000571e1d4c164736f6c634300081c0033" + "0x6080604052600436106101a4575f3560e01c8063715018a6116100e75780639e7a905811610087578063e30c397811610062578063e30c39781461048c578063e91a6391146104b6578063ede29fe5146104cb578063f2fde38b146104ea575f5ffd5b80639e7a905814610446578063cdfe7f5c1461045a578063dc680a0f1461046d575f5ffd5b80637df96ccd116100c25780637df96ccd146103b05780638456cb59146103dd5780638da5cb5b146103f15780638e26a4881461041b575f5ffd5b8063715018a61461033757806379ba50971461034b5780637d8c87aa1461035f575f5ffd5b80633f4ba83a116101525780635ef7e1041161012d5780635ef7e104146102bb5780636157f2ee146102ce57806365143424146102f957806369ce6d4714610318575f5ffd5b80633f4ba83a146102595780635c975abb1461026d5780635e4217e114610290575f5ffd5b80632d795b0a116101825780632d795b0a146102065780632f90b184146102255780633aef55ef1461023a575f5ffd5b806308273d8a146101a85780631bde8edf146101c95780632ac88e79146101f1575b5f5ffd5b3480156101b3575f5ffd5b506101c76101c23660046141bc565b610509565b005b3480156101d4575f5ffd5b506101de60cb5481565b6040519081526020015b60405180910390f35b3480156101fc575f5ffd5b506101de60cd5481565b348015610211575f5ffd5b506101c76102203660046142c7565b6105bd565b348015610230575f5ffd5b506101de60c95481565b348015610245575f5ffd5b506101c76102543660046143c6565b610917565b348015610264575f5ffd5b506101c761099c565b348015610278575f5ffd5b5060975460ff165b60405190151581526020016101e8565b34801561029b575f5ffd5b506101de6102aa3660046143f4565b60ca6020525f908152604090205481565b6101de6102c9366004614495565b6109ae565b3480156102d9575f5ffd5b506101de6102e83660046143f4565b60d06020525f908152604090205481565b348015610304575f5ffd5b506101c7610313366004614534565b610da4565b348015610323575f5ffd5b506101c76103323660046143f4565b610e76565b348015610342575f5ffd5b506101c7611068565b348015610356575f5ffd5b506101c7611079565b34801561036a575f5ffd5b5060ce5461038b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b3480156103bb575f5ffd5b506103cf6103ca366004614569565b61112e565b6040516101e8929190614651565b3480156103e8575f5ffd5b506101c7611b14565b3480156103fc575f5ffd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661038b565b348015610426575f5ffd5b506101de6104353660046143f4565b60cf6020525f908152604090205481565b348015610451575f5ffd5b5061038b611b24565b6101de610468366004614680565b611bef565b348015610478575f5ffd5b506102806104873660046146e2565b611ea8565b348015610497575f5ffd5b5060655473ffffffffffffffffffffffffffffffffffffffff1661038b565b3480156104c1575f5ffd5b506101de60cc5481565b3480156104d6575f5ffd5b506101c76104e53660046143f4565b611f38565b3480156104f5575f5ffd5b506101c76105043660046143f4565b6120be565b610516618000600161474e565b339073ffffffffffffffffffffffffffffffffffffffff168114610584576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b5060cb805490829055604051829082907fcc1b3d8a497e6002e26d007570cc9177a50c5cafc22abba1ff68155b8e8806bc905f90a35050565b337311111111111111111111111111111111111111118114610624576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161057b565b505f61063462010000600261474e565b73ffffffffffffffffffffffffffffffffffffffff1663e680c4c1866040518263ffffffff1660e01b815260040161066e91815260200190565b602060405180830381865afa158015610689573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ad919061477a565b905073ffffffffffffffffffffffffffffffffffffffff81166106ff576040517f2d159f390000000000000000000000000000000000000000000000000000000081526004810186905260240161057b565b61070d62010000600261474e565b73ffffffffffffffffffffffffffffffffffffffff1663e52db4ca866040518263ffffffff1660e01b815260040161074791815260200190565b602060405180830381865afa158015610762573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107869190614795565b604083015261079962010000601061474e565b604080517f6340bd1e000000000000000000000000000000000000000000000000000000008152600481018890526024810187905284517fff00000000000000000000000000000000000000000000000000000000000000166044820152602085015173ffffffffffffffffffffffffffffffffffffffff9081166064830152918501516084820152606085015160a4820152608085015160c482015260a085015160e482015260c0850151610104820152911690636340bd1e90610124015f604051808303815f87803b15801561086f575f5ffd5b505af1158015610881573d5f5f3e3d5ffd5b50506040517fddcc9eec0000000000000000000000000000000000000000000000000000000081526004810187905267ffffffffffffffff8616602482015273ffffffffffffffffffffffffffffffffffffffff8416925063ddcc9eec91506044015f604051808303815f87803b1580156108fa575f5ffd5b505af115801561090c573d5f5f3e3d5ffd5b505050505050505050565b610924618000600f61474e565b339073ffffffffffffffffffffffffffffffffffffffff16811461098d576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161057b565b50610998828261216e565b5050565b6109a46121d5565b6109ac612256565b565b5f6109b76122d4565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f819003610a13576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018114610a4d576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455610a7b8888612341565b5f610a868989612462565b509050610a92816124bb565b5f8667ffffffffffffffff811115610aac57610aac6141d3565b604051908082528060200260200182016040528015610b1257816020015b610aff60408051606080820183525f808352602080840183905284519283018552818352820181905281840152909182015290565b815260200190600190039081610aca5790505b509050865f8167ffffffffffffffff811115610b3057610b306141d3565b604051908082528060200260200182016040528015610b6357816020015b6060815260200190600190039081610b4e5790505b5090505f5b82811015610d3657610ba68b8b83818110610b8557610b856147ac565b9050602002810190610b9791906147d9565b610ba19080614815565b612512565b5f610bdd8c8c84818110610bbc57610bbc6147ac565b9050602002810190610bce91906147d9565b610bd89080614815565b612462565b9150508b8b83818110610bf257610bf26147ac565b9050602002810190610c0491906147d9565b610c12906040810190614876565b610c1b91614994565b838381518110610c2d57610c2d6147ac565b60200260200101819052505f610c758d8d85818110610c4e57610c4e6147ac565b9050602002810190610c6091906147d9565b610c6e906040810190614876565b600161112e565b50905060405180606001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020018e8e86818110610cb157610cb16147ac565b9050602002810190610cc391906147d9565b610cd1906020810190614815565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018290528651879085908110610d2157610d216147ac565b60209081029190910101525050600101610b68565b505f610d448989600261112e565b9150508060200151515f03610d6357610d5d46336125b6565b60208201525b610d6f85858385612618565b60017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4559d9c50505050505050505050505050565b610dac612b4f565b610db9618000600f61474e565b339073ffffffffffffffffffffffffffffffffffffffff168114610e22576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161057b565b50610e2b612baf565b80610e62576040517f9219606900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60cd819055610e71838361216e565b505050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f819003610ed2576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018114610f0c576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455335f90815260cf602052604081205490819003610f4d5750611040565b335f90815260cf60205260408082208290555173ffffffffffffffffffffffffffffffffffffffff85169083908381818185875af1925050503d805f8114610fb0576040519150601f19603f3d011682016040523d82523d5f602084013e610fb5565b606091505b5050905080610ff0576040517f16b0fa0000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405182815273ffffffffffffffffffffffffffffffffffffffff85169033907f4f8a50ec1fe3d316970fdadd1f94e0b822f92d31e2bac3c9dc2c6c287de071079060200160405180910390a350505b60017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4555050565b6110706121d5565b6109ac5f612caf565b606554339073ffffffffffffffffffffffffffffffffffffffff168114611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e65720000000000000000000000000000000000000000000000606482015260840161057b565b61112b81612caf565b50565b61115160405180606001604052805f81526020015f151581526020015f81525090565b604080516060808201835280825260208201525f918101919091525f6020830181905261117c612ce0565b60408051600580825260c082019092529192505f91906020820160a080368337019050509050855f5b81811015611b08575f8989838181106111c0576111c06147ac565b90506020028101906111d29190614815565b6111db91614a02565b90507fab4e9ad7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016113b957835f81518110611238576112386147ac565b602002602001015115819061129e576040517f9031f7510000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000909116600482015260240161057b565b505f8860038111156112b2576112b2614a68565b14806112cf575060018860038111156112cd576112cd614a68565b145b806112eb575060038860038111156112e9576112e9614a68565b145b818960038111156112fe576112fe614a68565b9091611360576040517fbcb41ec70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009092166004830152602482015260440161057b565b50506001845f81518110611376576113766147ac565b911515602092830291909101909101526113b28a8a8481811061139b5761139b6147ac565b90506020028101906113ad9190614815565b612db3565b8752611aff565b7f37b69159000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160161156d5783600181518110611415576114156147ac565b602002602001015115819061147b576040517f9031f7510000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000909116600482015260240161057b565b50600188600381111561149057611490614a68565b14806114ad575060038860038111156114ab576114ab614a68565b145b818960038111156114c0576114c0614a68565b9091611522576040517fbcb41ec70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009092166004830152602482015260440161057b565b5050600184600181518110611539576115396147ac565b9115156020928302919091018201526001908801526115638a8a8481811061139b5761139b6147ac565b6040880152611aff565b7ffab3fce5000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160161173057836002815181106115c9576115c96147ac565b602002602001015115819061162f576040517f9031f7510000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000909116600482015260240161057b565b50600288600381111561164457611644614a68565b14806116615750600388600381111561165f5761165f614a68565b145b8189600381111561167457611674614a68565b90916116d6576040517fbcb41ec70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009092166004830152602482015260440161057b565b50506001846002815181106116ed576116ed6147ac565b911515602092830291909101909101526117298a8a84818110611712576117126147ac565b90506020028101906117249190614815565b612dd5565b8652611aff565b7f46379968000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016118df578360038151811061178c5761178c6147ac565b60200260200101511581906117f2576040517f9031f7510000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000909116600482015260240161057b565b50600288600381111561180757611807614a68565b14806118245750600388600381111561182257611822614a68565b145b8189600381111561183757611837614a68565b9091611899576040517fbcb41ec70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009092166004830152602482015260440161057b565b50506001846003815181106118b0576118b06147ac565b911515602092830291909101909101526118d58a8a84818110611712576117126147ac565b6020870152611aff565b7f047f6e77000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601611aa9578360048151811061193b5761193b6147ac565b60200260200101511581906119a1576040517f9031f7510000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000909116600482015260240161057b565b5060028860038111156119b6576119b6614a68565b14806119d3575060038860038111156119d1576119d1614a68565b145b818960038111156119e6576119e6614a68565b9091611a48576040517fbcb41ec70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009092166004830152602482015260440161057b565b5050600184600481518110611a5f57611a5f6147ac565b911515602092830291909101909101525f611a9c8b8b85818110611a8557611a856147ac565b9050602002810190611a979190614815565b612df1565b1515604088015250611aff565b6040517fe1c9e4790000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008216600482015260240161057b565b506001016111a5565b50505050935093915050565b611b1c6121d5565b6109ac612e0c565b60ce545f9073ffffffffffffffffffffffffffffffffffffffff1615611b61575060ce5473ffffffffffffffffffffffffffffffffffffffff1690565b611b6f62010000600461474e565b73ffffffffffffffffffffffffffffffffffffffff166397bb3ce960cd546040518263ffffffff1660e01b8152600401611bab91815260200190565b602060405180830381865afa158015611bc6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bea919061477a565b905090565b5f611bf86122d4565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f819003611c54576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018114611c8e576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4555f5f611cbe8a8a612462565b91509150611ccb826124bb565b5f5f611cd98888600361112e565b915091508060200151515f03611cf957611cf346336125b6565b60208201525b6040805160018082528183019092525f91816020015b611d4460408051606080820183525f808352602080840183905284519283018552818352820181905281840152909182015290565b815260200190600190039081611d0f57905050905060405180606001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020018c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250505060209091018590528251839190611dd057611dd06147ac565b60209081029190910101526040805160018082528183019092525f91816020015b6060815260200190600190039081611df1579050509050611e12898b614994565b815f81518110611e2457611e246147ac565b60200260200101819052505f611e3c87848685612618565b9050805f604051602001611e5a929190918252602082015260400190565b6040516020818303038152906040528051906020012098505050505050505060017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455509695505050505050565b5f5f611eb2612ce0565b905060055f5b81811015611f2e57828160058110611ed257611ed26147ac565b60200201517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603611f2657506001949350505050565b600101611eb8565b505f949350505050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4545f819003611f94576040517fdd7e362100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018114611fce576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60027f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455335f90815260d060205260408120549081900361200f5750611040565b335f90815260d06020526040812055612048838261202b612e67565b73ffffffffffffffffffffffffffffffffffffffff169190612f23565b60405181815273ffffffffffffffffffffffffffffffffffffffff84169033907fa110ebf89b526305714adcef557c32d5a6cb285fecfe646c16c985d9b494e9ab9060200160405180910390a35060017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4555050565b6120c66121d5565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561212960335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b73ffffffffffffffffffffffffffffffffffffffff81166121bb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c9829055678ac7230489e8000060cc5561099881612caf565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161057b565b61225e612ff7565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390a1565b60975460ff16156109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161057b565b81816005811015612380576040517fe7c8d4cf00000000000000000000000000000000000000000000000000000000815260040161057b929190614a95565b50505f82826004818110612396576123966147ac565b919091013560f81c91506123ad9050816006614ae1565b8390839060ff168110156123ef576040517fe7c8d4cf00000000000000000000000000000000000000000000000000000000815260040161057b929190614a95565b505f90508383612400846005614ae1565b60ff16818110612412576124126147ac565b919091013560f81c915084905083821561245a576040517f884f49ba00000000000000000000000000000000000000000000000000000000815260040161057b929190614a95565b505050505050565b5f5f5f61246f8585613063565b909450925090508484826124b1576040517fe7c8d4cf00000000000000000000000000000000000000000000000000000000815260040161057b929190614a95565b5050509250929050565b4660c954141580156124cf575060c9548114155b46829091610e71576040517fc5441a630000000000000000000000000000000000000000000000000000000081526004810192909252602482015260440161057b565b81816005811015612551576040517fe7c8d4cf00000000000000000000000000000000000000000000000000000000815260040161057b929190614a95565b50505f82826004818110612567576125676147ac565b919091013560f81c91508390508282156125af576040517ffe8b1b1600000000000000000000000000000000000000000000000000000000815260040161057b929190614a95565b5050505050565b60605f6125c284613121565b80516040519192506125ff917e01000000000000000000000000000000000000000000000000000000000000919084906014908890602001614b11565b6040516020818303038152906040529150505b92915050565b5f8061262862010000600261474e565b73ffffffffffffffffffffffffffffffffffffffff1663e52db4ca876040518263ffffffff1660e01b815260040161266291815260200190565b602060405180830381865afa15801561267d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a19190614795565b905085816126de576040517f2d159f3900000000000000000000000000000000000000000000000000000000815260040161057b91815260200190565b506040805160e0810182527f010000000000000000000000000000000000000000000000000000000000000081524660208083019190915281830189905260608201849052335f81815260ca83528481205494519094608085019361277493920160609290921b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168252601482015260340190565b604051602081830303815290604052805190602001208152602001875167ffffffffffffffff8111156127a9576127a96141d3565b60405190808252806020026020018201604052801561282857816020015b6040805160c0810182525f80825260208083018290529282018190526060808301829052608083019190915260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816127c75790505b5081526020908101879052335f90815260ca9091526040812080549293509161285090614bcf565b9091555085515f908190815b8181101561293b575f6128898b838151811061287a5761287a6147ac565b60200260200101518d33613180565b9050808660a0015183815181106128a2576128a26147ac565b60200260200101819052508a82815181106128bf576128bf6147ac565b6020026020010151604001515f0151856128d99190614c06565b94508a82815181106128ed576128ed6147ac565b6020026020010151604001516020015115612932578a8281518110612914576129146147ac565b602002602001015160400151604001518461292f9190614c06565b93505b5060010161285c565b508760400151156129df575f8160cc546129559190614c19565b9050612983333083612965612e67565b73ffffffffffffffffffffffffffffffffffffffff16929190613483565b415f90815260d06020526040812080548392906129a1908490614c06565b9091555050604051818152419033907f72dac9025dcab5f2fd6d18a6a449e176e61b833a67bebc3e0199d6d83e98251d9060200160405180910390a3505b6129f98460400151856060015185858c60400151866134e7565b5f5f85604051602001612a0c9190614db2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050612a49618000600861474e565b73ffffffffffffffffffffffffffffffffffffffff166362f84b24600160f81b83604051602001612a7b929190614dc4565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401612aa69190614df7565b6020604051808303815f875af1158015612ac2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ae69190614795565b9150612af246826137a0565b975050612b068560a001518c898d8c6137d2565b7f593b2515b718ee761cd2a586d8613d22833a452122cfb7692ebabd538d57d3ff818887604051612b3993929190614e09565b60405180910390a1505050505050949350505050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf480546001909155801561112b576040517fdf3a8fdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615612c46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960448201527f616c697a696e6700000000000000000000000000000000000000000000000000606482015260840161057b565b5f5460ff908116146109ac575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016122ca565b606580547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561112b816138ee565b612ce861419e565b506040805160a0810182527f54b165290000000000000000000000000000000000000000000000000000000081527fc8496ea70000000000000000000000000000000000000000000000000000000060208201527f054c031b00000000000000000000000000000000000000000000000000000000918101919091527fb9c866980000000000000000000000000000000000000000000000000000000060608201527ffb80918900000000000000000000000000000000000000000000000000000000608082015290565b5f612dc18260048186614e27565b810190612dce91906141bc565b9392505050565b6060612de48260048186614e27565b810190612dce9190614e4e565b5f612dff8260048186614e27565b810190612dce9190614e8d565b612e146122d4565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122a93390565b5f5f612e71611b24565b905073ffffffffffffffffffffffffffffffffffffffff8116612ec0576040517f9219606900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ce5473ffffffffffffffffffffffffffffffffffffffff16612f1e5760ce80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b919050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610e719084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613964565b60975460ff166109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161057b565b5f5f5f5f5f365f365f6130768b8b613a71565b9550955095509550955095508580156130af57507fffff0000000000000000000000000000000000000000000000000000000000008516155b80156130bb5750602183105b80156130cf57508015806130cf5750601481145b6130db575f5f5f61310e565b60016130e8846008614c19565b6130f490610100614ea8565b6130fe8587614ebb565b901c61310a8385614ef7565b60601c5b9850985098505050505050509250925092565b60605f61312d83613bfb565b6001019050612dce816020038460405160200161314c91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290613c64565b6040805160c0810182525f808252602082018190529181018290526060808201839052608082019290925260a081019190915283516040850151602001511561340b57604080860151808201519051602088015192517f4d7e3d620000000000000000000000000000000000000000000000000000000081525f9373ffffffffffffffffffffffffffffffffffffffff861693634d7e3d6293909261322e928b928b92909190600401614f5c565b5f6040518083038185885af1158015613249573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261328f9190810190614fed565b60408082015190517f7df96ccd0000000000000000000000000000000000000000000000000000000081529192505f913091637df96ccd916132d6919085906004016151a2565b5f60405180830381865afa1580156132f0573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261333591908101906151f8565b508051604089015151919250818114613383576040517f62d214aa0000000000000000000000000000000000000000000000000000000081526004810192909252602482015260440161057b565b50505f613392835f0151613c72565b6040805160c0810182527f010000000000000000000000000000000000000000000000000000000000000081525f60208083019190915273ffffffffffffffffffffffffffffffffffffffff938416828401529288166060820152908b015151608082015294015160a08501525091935061347b915050565b6040805160c0810182527f010000000000000000000000000000000000000000000000000000000000000081525f60208083019190915273ffffffffffffffffffffffffffffffffffffffff8085168385015286166060830152918701515160808201529086015160a082015291505b509392505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526134e19085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612f75565b50505050565b5f6134f662010000600461474e565b73ffffffffffffffffffffffffffffffffffffffff1663cb944dec6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561353e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135629190614795565b90505f8361357d578260cb546135789190614c19565b61357f565b5f5b905081870361363c575f816135948789614c06565b61359e9190614c06565b905080348082146135e4576040517f4a0944310000000000000000000000000000000000000000000000000000000081526004810192909252602482015260440161057b565b505086156136365760405163deadbeef9088905f81818185875af1925050503d805f811461362d576040519150601f19603f3d011682016040523d82523d5f602084013e613632565b606091505b5050505b50613737565b5f6136478287614c06565b9050803480821461368d576040517f4a0944310000000000000000000000000000000000000000000000000000000081526004810192909252602482015260440161057b565b50508615613735576136a362010000600361474e565b6040517fc4879440000000000000000000000000000000000000000000000000000000008152600481018b9052602481018a90523360448201526064810189905273ffffffffffffffffffffffffffffffffffffffff919091169063c4879440906084015f604051808303815f87803b15801561371e575f5ffd5b505af1158015613730573d5f5f3e3d5ffd5b505050505b505b801561379657415f90815260cf60205260408120805483929061375b908490614c06565b909155505060405181815241907fd971d38da489e0daf6015ede73e6fad2c46ff4bba3641491a60dd6f25ae452b99060200160405180910390a25b5050505050505050565b5f82826040516020016137b49291906152e8565b60405160208183030381529060405280519060200120905092915050565b81515f5b818110156138e5575f8782815181106137f1576137f16147ac565b602002602001015190508582604051602001613817929190918252602082015260400190565b604051602081830303815290604052805190602001207f7446eaa0a0dda80670b3bfe972bfbefab659bcfb67abad4e0b64dc4630a7048161385c4684606001516125b6565b61386a8a85604001516125b6565b88868151811061387c5761387c6147ac565b60200260200101516020015189878151811061389a5761389a6147ac565b6020026020010151604001515f01518988815181106138bb576138bb6147ac565b60200260200101516040516138d4959493929190615300565b60405180910390a2506001016137d6565b50505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6139c5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613cc59092919063ffffffff16565b905080515f14806139e55750808060200190518101906139e5919061535e565b610e71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161057b565b60015f368181816006871015613a9757505f945084935083925082915081905080613bf1565b7fffff0000000000000000000000000000000000000000000000000000000000008835167e010000000000000000000000000000000000000000000000000000000000008114613af957505f9550859450849350839250829150819050613bf1565b60028901357fffff0000000000000000000000000000000000000000000000000000000000001695505f89896004818110613b3657613b366147ac565b919091013560f81c9150506006810160ff16891015613b6957505f9650869550859450849350839250829150613bf19050565b613b7c600582810160ff16908b8d614e27565b955095505f8a8a8360050160ff16818110613b9957613b996147ac565b919091013560f81c91505081810160060160ff168a1015613bcf57505f9750879650869550859450849350839250613bf1915050565b613be960ff60068484018101821691908501168c8e614e27565b945094505050505b9295509295509295565b5f80608083901c15613c125760809290921c916010015b604083901c15613c275760409290921c916008015b602083901c15613c3c5760209290921c916004015b601083901c15613c515760109290921c916002015b600883901c156126125760010192915050565b6060612dce83838551613cdb565b5f5f5f613c7e84613d5f565b909450925090508381613cbe576040517fe7c8d4cf00000000000000000000000000000000000000000000000000000000815260040161057b9190614df7565b5050915091565b6060613cd384845f85613e18565b949350505050565b8251606090613cea8382613f2d565b9250613cf68484613f2d565b93505f613d038585614ea8565b67ffffffffffffffff811115613d1b57613d1b6141d3565b6040519080825280601f01601f191660200182016040528015613d45576020820181803683370190505b509050848403856020880101602083015e95945050505050565b5f5f5f5f5f5f5f613d6f88613f42565b9350935093509350838015613da457507fffff0000000000000000000000000000000000000000000000000000000000008316155b8015613db1575060218251105b8015613dc7575080511580613dc7575080516014145b613dd3575f5f5f613e07565b600182516008613de39190614c19565b613def90610100614ea8565b613df884615379565b901c613e03836153be565b60601c5b965096509650505050509193909250565b606082471015613eaa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161057b565b5f5f8673ffffffffffffffffffffffffffffffffffffffff168587604051613ed2919061542a565b5f6040518083038185875af1925050503d805f8114613f0c576040519150601f19603f3d011682016040523d82523d5f602084013e613f11565b606091505b5091509150613f22878383876140c0565b979650505050505050565b5f818310613f3b5781612dce565b5090919050565b5f5f60608060019350600685511015613f6657505f925082915060609050806140b9565b60208501517fffff000000000000000000000000000000000000000000000000000000000000167e010000000000000000000000000000000000000000000000000000000000008114613fc657505f9350839250606091508190506140b9565b60228601517fffff0000000000000000000000000000000000000000000000000000000000001693505f86600481518110614003576140036147ac565b602001015160f81c60f81b60f81c90508060060160ff168751101561403757505f9450849350606092508291506140b99050565b61404887600560ff84820116613cdb565b93505f878260050160ff1681518110614063576140636147ac565b602001015160f81c60f81b60f81c905080826006010160ff168851101561409a57505f9550859450606093508392506140b9915050565b6140b388600684810160ff908116918587010116613cdb565b93505050505b9193509193565b606083156141555782515f0361414e5773ffffffffffffffffffffffffffffffffffffffff85163b61414e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161057b565b5081613cd3565b613cd3838381511561416a5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057b9190614df7565b6040518060a001604052806005906020820280368337509192915050565b5f602082840312156141cc575f5ffd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff81118282101715614223576142236141d3565b60405290565b6040516060810167ffffffffffffffff81118282101715614223576142236141d3565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614293576142936141d3565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461112b575f5ffd5b8035612f1e8161429b565b5f5f5f5f8486036101408112156142dc575f5ffd5b8535945060208601359350604086013567ffffffffffffffff81168114614301575f5ffd5b925060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa082011215614332575f5ffd5b5061433b614200565b60608601357fff000000000000000000000000000000000000000000000000000000000000008116811461436d575f5ffd5b815261437b608087016142bc565b602082015260a086810135604083015260c080880135606084015260e08801356080840152610100880135918301919091526101209096013595810195909552509194909350909190565b5f5f604083850312156143d7575f5ffd5b8235915060208301356143e98161429b565b809150509250929050565b5f60208284031215614404575f5ffd5b8135612dce8161429b565b5f5f83601f84011261441f575f5ffd5b50813567ffffffffffffffff811115614436575f5ffd5b60208301915083602082850101111561444d575f5ffd5b9250929050565b5f5f83601f840112614464575f5ffd5b50813567ffffffffffffffff81111561447b575f5ffd5b6020830191508360208260051b850101111561444d575f5ffd5b5f5f5f5f5f5f606087890312156144aa575f5ffd5b863567ffffffffffffffff8111156144c0575f5ffd5b6144cc89828a0161440f565b909750955050602087013567ffffffffffffffff8111156144eb575f5ffd5b6144f789828a01614454565b909550935050604087013567ffffffffffffffff811115614516575f5ffd5b61452289828a01614454565b979a9699509497509295939492505050565b5f5f5f60608486031215614546575f5ffd5b8335925060208401356145588161429b565b929592945050506040919091013590565b5f5f5f6040848603121561457b575f5ffd5b833567ffffffffffffffff811115614591575f5ffd5b61459d86828701614454565b9094509250506020840135600481106145b4575f5ffd5b809150509250925092565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f81516060845261461f60608501826145bf565b90506020830151848203602086015261463882826145bf565b9150506040830151151560408501528091505092915050565b8251815260208301511515602082015260408301516040820152608060608201525f613cd3608083018461460b565b5f5f5f5f5f5f60608789031215614695575f5ffd5b863567ffffffffffffffff8111156146ab575f5ffd5b6146b789828a0161440f565b909750955050602087013567ffffffffffffffff8111156146d6575f5ffd5b6144f789828a0161440f565b5f602082840312156146f2575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612dce575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff818116838216019081111561261257612612614721565b5f6020828403121561478a575f5ffd5b8151612dce8161429b565b5f602082840312156147a5575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261480b575f5ffd5b9190910192915050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614848575f5ffd5b83018035915067ffffffffffffffff821115614862575f5ffd5b60200191503681900382131561444d575f5ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126148a9575f5ffd5b83018035915067ffffffffffffffff8211156148c3575f5ffd5b6020019150600581901b360382131561444d575f5ffd5b5f67ffffffffffffffff8211156148f3576148f36141d3565b5060051b60200190565b5f67ffffffffffffffff821115614916576149166141d3565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112614951575f5ffd5b813561496461495f826148fd565b61424c565b818152846020838601011115614978575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f6149a161495f846148da565b8381526020810190600585901b8401368111156149bc575f5ffd5b845b818110156149f757803567ffffffffffffffff8111156149dc575f5ffd5b6149e836828901614942565b855250602093840193016149be565b509095945050505050565b80357fffffffff000000000000000000000000000000000000000000000000000000008116906004841015614a61577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b60ff818116838216019081111561261257612612614721565b5f81518060208401855e5f93019283525090919050565b7fffffffff00000000000000000000000000000000000000000000000000000000861681527fff000000000000000000000000000000000000000000000000000000000000008560f81b1660048201525f614b6f6005830186614afa565b60f89490941b7fff00000000000000000000000000000000000000000000000000000000000000168452505060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018201526015019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614bff57614bff614721565b5060010190565b8082018082111561261257612612614721565b808202811582820484141761261257612612614721565b5f60e083017fff0000000000000000000000000000000000000000000000000000000000000083511684526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160e060a0860152818151808452610100870191506101008160051b88010193506020830192505f5b81811015614d8e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0088860301835283517fff00000000000000000000000000000000000000000000000000000000000000815116865260208101511515602087015273ffffffffffffffffffffffffffffffffffffffff604082015116604087015273ffffffffffffffffffffffffffffffffffffffff60608201511660608701526080810151608087015260a0810151905060c060a0870152614d7860c08701826145bf565b9550506020938401939290920191600101614cb0565b5050505060c083015184820360c0860152614da9828261460b565b95945050505050565b602081525f612dce6020830184614c30565b7fff00000000000000000000000000000000000000000000000000000000000000831681525f613cd36001830184614afa565b602081525f612dce60208301846145bf565b838152826020820152606060408201525f614da96060830184614c30565b5f5f85851115614e35575f5ffd5b83861115614e41575f5ffd5b5050820193919092039150565b5f60208284031215614e5e575f5ffd5b813567ffffffffffffffff811115614e74575f5ffd5b613cd384828501614942565b801515811461112b575f5ffd5b5f60208284031215614e9d575f5ffd5b8135612dce81614e80565b8181038181111561261257612612614721565b80356020831015612612577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116906014841015614a61577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808560140360031b1b82161691505092915050565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201525f614f9660808301846145bf565b9695505050505050565b5f82601f830112614faf575f5ffd5b8151614fbd61495f826148fd565b818152846020838601011115614fd1575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60208284031215614ffd575f5ffd5b815167ffffffffffffffff811115615013575f5ffd5b820160608185031215615024575f5ffd5b61502c614229565b815167ffffffffffffffff811115615042575f5ffd5b61504e86828501614fa0565b825250602082015167ffffffffffffffff81111561506a575f5ffd5b61507686828501614fa0565b602083015250604082015167ffffffffffffffff811115615095575f5ffd5b80830192505084601f8301126150a9575f5ffd5b81516150b761495f826148da565b8082825260208201915060208360051b8601019250878311156150d8575f5ffd5b602085015b8381101561511957805167ffffffffffffffff8111156150fb575f5ffd5b61510a8a6020838a0101614fa0565b845250602092830192016150dd565b506040840152509095945050505050565b5f82825180855260208501945060208160051b830101602085015f5b83811015615196577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08584030188526151808383516145bf565b6020988901989093509190910190600101615146565b50909695505050505050565b604081525f6151b4604083018561512a565b9050600483106151eb577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8260208301529392505050565b5f5f828403608081121561520a575f5ffd5b6060811215615217575f5ffd5b50615220614229565b83518152602084015161523281614e80565b602082015260408481015190820152606084015190925067ffffffffffffffff81111561525d575f5ffd5b83016060818603121561526e575f5ffd5b615276614229565b815167ffffffffffffffff81111561528c575f5ffd5b61529887828501614fa0565b825250602082015167ffffffffffffffff8111156152b4575f5ffd5b6152c087828501614fa0565b602083015250604082015191506152d682614e80565b81604082015280925050509250929050565b828152604060208201525f613cd360408301846145bf565b60a081525f61531260a08301886145bf565b828103602084015261532481886145bf565b9050828103604084015261533881876145bf565b90508460608401528281036080840152615352818561512a565b98975050505050505050565b5f6020828403121561536e575f5ffd5b8151612dce81614e80565b805160208083015191908110156153b8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b805160208201517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000811691906014821015615423577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808360140360031b1b82161692505b5050919050565b5f612dce8284614afa56fea2646970667358221220c8f021911e4a146993db5be23f5b949d5ac178d65d78120f35b26f9f156ee09164736f6c634300081c0033" ], [ "0x000000000000000000000000000000000001000e", - "0x608060405260043610610079575f3560e01c80637e4fbbde1161004c5780637e4fbbde146101285780639848391814610163578063aac0ac4614610182578063fdf736a3146101c8575f5ffd5b80632432ef261461007d5780632949e7b7146100c65780632f90b184146100e7578063743565a614610109575b5f5ffd5b61009061008b366004612099565b6101e7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b3480156100d1575f5ffd5b506100e56100e036600461233d565b6103f5565b005b3480156100f2575f5ffd5b506100fb5f5481565b6040519081526020016100bd565b348015610114575f5ffd5b506100e561012336600461233d565b6106f7565b348015610133575f5ffd5b5061015661014236600461247d565b60016020525f908152604090205460ff1681565b6040516100bd91906124c1565b34801561016e575f5ffd5b506100e561017d3660046124db565b610824565b34801561018d575f5ffd5b506101bb61019c36600461257b565b600260209081525f928352604080842090915290825290205460ff1681565b6040516100bd91906125af565b3480156101d3575f5ffd5b506100e56101e236600461247d565b610d4a565b5f33308114610240576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b505f61024f60048285876125bd565b610258916125e4565b90505f5f6102668888610dc9565b90925090507fd6b61849000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008416016102c7576102c2868684848c8c610e22565b6103c7565b7f8bca9a5a000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084160161031a576102c28686610f84565b7f67b7c6e8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000841601610371576102c2868684848c8c611016565b6040517f12ba286f0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000084166004820152602401610237565b507f2432ef260000000000000000000000000000000000000000000000000000000098975050505050505050565b5f5f5f61040585855f0151611172565b865160208401519396509194509250839190818114610461576040517f534ab1b2000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610237565b50505060408301518290468181146104b6576040517f4534e972000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610237565b50505060a0830151515115610567575f5f6104d78560a001515f0151611237565b9092509050333014806105125750468214806104f1575081155b8015610512575073ffffffffffffffffffffffffffffffffffffffff811633145b8461051d463361128a565b8760a001515f0151909192610561576040517fe845be4c00000000000000000000000000000000000000000000000000000000815260040161023793929190612696565b50505050505b5f81600381111561057a5761057a612494565b14806105975750600181600381111561059557610595612494565b145b82906105d2576040517f5bba511100000000000000000000000000000000000000000000000000000000815260040161023791815260200190565b5060018160038111156105e7576105e7612494565b146105f7576105f78585846112ec565b5f82815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166002179055608084015151905b81811015610687575f848152600260209081526040808320848452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915501610635565b5060208401516106c590848660015f6040519080825280602002602001820160405280156106bf578160200160208202803683370190505b50611630565b60405183907fdd0fe78c1153f6af3f72afd04381692d6ee5747db36a59c9fec395ad369d3625905f90a2505050505050565b5f5f5f61070785855f0151611172565b865160208401519396509194509250839190818114610763576040517f534ab1b2000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610237565b50505060408301518290468181146107b8576040517f4534e972000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610237565b505f91506107c39050565b8160038111156107d5576107d5612494565b148290610811576040517f5bba511100000000000000000000000000000000000000000000000000000000815260040161023791815260200190565b5061081d8585846112ec565b5050505050565b5f5f5f6108318688611172565b6020830151929550909350915082908881811461088b576040517f534ab1b2000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610237565b50505060408301518290468181146108e0576040517f4534e972000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610237565b5050505f5f6108f68560a0015160200151611237565b909250905033301480610931575046821480610910575081155b8015610931575073ffffffffffffffffffffffffffffffffffffffff811633145b8461093c463361128a565b8760a0015160200151909192610981576040517f0345c28100000000000000000000000000000000000000000000000000000000815260040161023793929190612696565b505050608085015151868181146109cd576040517f801534e900000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610237565b50600190508360038111156109e4576109e4612494565b1480610a01575060038360038111156109ff576109ff612494565b145b8490610a3c576040517ff729f26d00000000000000000000000000000000000000000000000000000000815260040161023791815260200190565b505f84815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166003179055608086015151905b81811015610cd4575f86815260026020908152604080832084845290915281205460ff16908a8a84818110610ab257610ab26126ca565b9050602002016020810190610ac7919061270a565b90506001816002811115610add57610add612494565b03610bc1575f826002811115610af557610af5612494565b1488849091610b39576040517fc087b72700000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610237565b50505f88815260026020908152604080832086845290915290208054600191907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168280021790555082887f3cd077a28cf869e00954d27389bcc31fe5b102eab4ebdae82fb94fbdcc375f4a6001604051610bb491906125af565b60405180910390a3610cca565b6002816002811115610bd557610bd5612494565b03610cca576001826002811115610bee57610bee612494565b141588849091610c33576040517fd5c7a37600000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610237565b505f9050826002811115610c4957610c49612494565b03610cca575f8881526002602081815260408084208785529091529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682179055905184918a917f3cd077a28cf869e00954d27389bcc31fe5b102eab4ebdae82fb94fbdcc375f4a91610cc1916125af565b60405180910390a35b5050600101610a7b565b50610d148a86885f8c8c808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061163092505050565b60405185907fcbcf7285f516f8a98b3ff4620dc76c656cce11fe9902ee012f43814dceb0e0c4905f90a250505050505050505050565b610d52611958565b610d5f618000600f612750565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dc5576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610237565b5f55565b5f5f5f610dd685856119bb565b90945092509050848482610e18576040517fe7c8d4cf0000000000000000000000000000000000000000000000000000000081526004016102379291906127c3565b5050509250929050565b5f80610e31876004818b6125bd565b810190610e3e919061233d565b915091505f610e5083835f0151611172565b505060a0810151515190915015610f0e575f5f610e738360a001515f0151611237565b9150915088821480610e83575081155b8015610eba57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b8551602087012060a085015151909189918991610f07576040517fe845be4c00000000000000000000000000000000000000000000000000000000815260040161023794939291906127de565b5050505050505b6040517f2949e7b70000000000000000000000000000000000000000000000000000000081523090632949e7b790610f4c9086908690600401612856565b5f604051808303815f87803b158015610f63575f5ffd5b505af1158015610f75573d5f5f3e3d5ffd5b50505050505050505050505050565b5f80610f9383600481876125bd565b810190610fa0919061233d565b6040517f743565a60000000000000000000000000000000000000000000000000000000081529193509150309063743565a690610fe39085908590600401612856565b5f604051808303815f87803b158015610ffa575f5ffd5b505af115801561100c573d5f5f3e3d5ffd5b5050505050505050565b5f8080611026886004818c6125bd565b81019061103391906128f7565b9250925092505f6110448385611172565b505090505f5f61105b8360a0015160200151611237565b915091508982148061106b575081155b80156110a257508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b858051906020012089898660a0015160200151909192936110f3576040517f0345c28100000000000000000000000000000000000000000000000000000000815260040161023794939291906127de565b50506040517f9848391800000000000000000000000000000000000000000000000000000000815230925063984839189150611137908990899089906004016129c4565b5f604051808303815f87803b15801561114e575f5ffd5b505af1158015611160573d5f5f3e3d5ffd5b50505050505050505050505050505050565b61117a611fde565b5f5f848060200190518101906111909190612c5a565b80519093507fff00000000000000000000000000000000000000000000000000000000000000167f01000000000000000000000000000000000000000000000000000000000000001461120f576040517feae192ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112198486611a79565b5f81815260016020526040902054939690955060ff90931693505050565b5f5f5f61124384611aab565b909450925090508381611283576040517fe7c8d4cf0000000000000000000000000000000000000000000000000000000081526004016102379190612d20565b5050915091565b60605f61129684611b64565b80516040519192506112d3917e01000000000000000000000000000000000000000000000000000000000000919084906014908890602001612d49565b6040516020818303038152906040529150505b92915050565b6112fa62010000600d612750565b73ffffffffffffffffffffffffffffffffffffffff1682606001516020015173ffffffffffffffffffffffffffffffffffffffff161462010000600d6113409190612750565b83606001516020015190916113a1576040517f89fd2c7600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610237565b50506040516113d6907f0100000000000000000000000000000000000000000000000000000000000000908590602001612e07565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152606084015101525f61141a620100006009612750565b73ffffffffffffffffffffffffffffffffffffffff166318b7fc22845f015185602001518660400151876060015188608001516040518663ffffffff1660e01b815260040161146d959493929190612e3a565b602060405180830381865afa158015611488573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ac9190612ea2565b9050806114e5576040517f32c2e15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905561152b6180006008612750565b604080517f743565a600000000000000000000000000000000000000000000000000000000602082015260248082018690528251808303909101815260448201928390527f62f84b240000000000000000000000000000000000000000000000000000000090925273ffffffffffffffffffffffffffffffffffffffff92909216916362f84b24916115bf91604801612d20565b6020604051808303815f875af11580156115db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ff9190612ebb565b5060405182907f2f34edd4f9447fc2e17c3670ad4e71dc46b3bcc01346abdd20d82801d2118c54905f90a250505050565b6080830151515f5b8181101561194f5783611694575f838281518110611658576116586126ca565b602002602001015190506001600281111561167557611675612494565b81600281111561168757611687612494565b146116925750611947565b505b5f856080015182815181106116ab576116ab6126ca565b602090810291909101015180519091507fff00000000000000000000000000000000000000000000000000000000000000167f010000000000000000000000000000000000000000000000000000000000000014611735576040517fd5f1397300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6080810151156117d65761174c618000600a612750565b60808201516040517f40c10f19000000000000000000000000000000000000000000000000000000008152306004820152602481019190915273ffffffffffffffffffffffffffffffffffffffff91909116906340c10f19906044015f604051808303815f87803b1580156117bf575f5ffd5b505af11580156117d1573d5f5f3e3d5ffd5b505050505b5f816040015173ffffffffffffffffffffffffffffffffffffffff16632432ef2683608001518a86604051602001611818929190918252602082015260400190565b6040516020818303038152906040528051906020012061183c8d876060015161128a565b8660a001516040518563ffffffff1660e01b815260040161185f93929190612696565b60206040518083038185885af115801561187b573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906118a09190612ed2565b9050807fffffffff0000000000000000000000000000000000000000000000000000000081167f2432ef260000000000000000000000000000000000000000000000000000000014611943576040517f12ba286f0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610237565b5050505b600101611638565b50505050505050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf48054600190915580156119b8576040517fdf3a8fdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f5f5f5f5f365f365f6119ce8b8b611bca565b955095509550955095509550858015611a0757507fffff0000000000000000000000000000000000000000000000000000000000008516155b8015611a135750602183105b8015611a275750801580611a275750601481145b611a33575f5f5f611a66565b6001611a40846008612f11565b611a4c90610100612f28565b611a568587612f3b565b901c611a628385612f77565b60601c5b9850985098505050505050509250925092565b5f8282604051602001611a8d929190612fdc565b60405160208183030381529060405280519060200120905092915050565b5f5f5f5f5f5f5f611abb88611d54565b9350935093509350838015611af057507fffff0000000000000000000000000000000000000000000000000000000000008316155b8015611afd575060218251105b8015611b13575080511580611b13575080516014145b611b1f575f5f5f611b53565b600182516008611b2f9190612f11565b611b3b90610100612f28565b611b4484612ff4565b901c611b4f83613039565b60601c5b965096509650505050509193909250565b60605f611b7083611ed2565b6001019050611bc38160200384604051602001611b8f91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290611f3b565b9392505050565b60015f368181816006871015611bf057505f945084935083925082915081905080611d4a565b7fffff0000000000000000000000000000000000000000000000000000000000008835167e010000000000000000000000000000000000000000000000000000000000008114611c5257505f9550859450849350839250829150819050611d4a565b60028901357fffff0000000000000000000000000000000000000000000000000000000000001695505f89896004818110611c8f57611c8f6126ca565b919091013560f81c9150506006810160ff16891015611cc257505f9650869550859450849350839250829150611d4a9050565b611cd5600582810160ff16908b8d6125bd565b955095505f8a8a8360050160ff16818110611cf257611cf26126ca565b919091013560f81c91505081810160060160ff168a1015611d2857505f9750879650869550859450849350839250611d4a915050565b611d4260ff60068484018101821691908501168c8e6125bd565b945094505050505b9295509295509295565b5f5f60608060019350600685511015611d7857505f92508291506060905080611ecb565b60208501517fffff000000000000000000000000000000000000000000000000000000000000167e010000000000000000000000000000000000000000000000000000000000008114611dd857505f935083925060609150819050611ecb565b60228601517fffff0000000000000000000000000000000000000000000000000000000000001693505f86600481518110611e1557611e156126ca565b602001015160f81c60f81b60f81c90508060060160ff1687511015611e4957505f945084935060609250829150611ecb9050565b611e5a87600560ff84820116611f45565b93505f878260050160ff1681518110611e7557611e756126ca565b602001015160f81c60f81b60f81c905080826006010160ff1688511015611eac57505f955085945060609350839250611ecb915050565b611ec588600684810160ff908116918587010116611f45565b93505050505b9193509193565b5f80608083901c15611ee95760809290921c916010015b604083901c15611efe5760409290921c916008015b602083901c15611f135760209290921c916004015b601083901c15611f285760109290921c916002015b600883901c156112e65760010192915050565b6060611bc3838385515b8251606090611f548382611fc9565b9250611f608484611fc9565b93505f611f6d8585612f28565b67ffffffffffffffff811115611f8557611f85612112565b6040519080825280601f01601f191660200182016040528015611faf576020820181803683370190505b509050848403856020880101602083015e95945050505050565b5f818310611fd75781611bc3565b5090919050565b6040518060c001604052805f7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020015f81526020015f81526020015f81526020016060815260200161204f604051806060016040528060608152602001606081526020015f151581525090565b905290565b5f5f83601f840112612064575f5ffd5b50813567ffffffffffffffff81111561207b575f5ffd5b602083019150836020828501011115612092575f5ffd5b9250929050565b5f5f5f5f5f606086880312156120ad575f5ffd5b85359450602086013567ffffffffffffffff8111156120ca575f5ffd5b6120d688828901612054565b909550935050604086013567ffffffffffffffff8111156120f5575f5ffd5b61210188828901612054565b969995985093965092949392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160a0810167ffffffffffffffff8111828210171561216257612162612112565b60405290565b6040516060810167ffffffffffffffff8111828210171561216257612162612112565b60405160c0810167ffffffffffffffff8111828210171561216257612162612112565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156121f5576121f5612112565b604052919050565b5f67ffffffffffffffff82111561221657612216612112565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112612251575f5ffd5b813561226461225f826121fd565b6121ae565b818152846020838601011115612278575f5ffd5b816020850160208301375f918101602001919091529392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146119b8575f5ffd5b5f67ffffffffffffffff8211156122ce576122ce612112565b5060051b60200190565b5f82601f8301126122e7575f5ffd5b81356122f561225f826122b5565b8082825260208201915060208360051b860101925085831115612316575f5ffd5b602085015b8381101561233357803583526020928301920161231b565b5095945050505050565b5f5f6040838503121561234e575f5ffd5b823567ffffffffffffffff811115612364575f5ffd5b61237085828601612242565b925050602083013567ffffffffffffffff81111561238c575f5ffd5b830160a0818603121561239d575f5ffd5b6123a561213f565b813581526020808301359082015260408083013590820152606082013567ffffffffffffffff8111156123d6575f5ffd5b8201606081880312156123e7575f5ffd5b6123ef612168565b813561ffff81168114612400575f5ffd5b8152602082013561241081612294565b6020820152604082013567ffffffffffffffff81111561242e575f5ffd5b61243a89828501612242565b604083015250606083015250608082013567ffffffffffffffff81111561245f575f5ffd5b61246b878285016122d8565b60808301525080925050509250929050565b5f6020828403121561248d575f5ffd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600483106124d5576124d5612494565b91905290565b5f5f5f5f606085870312156124ee575f5ffd5b84359350602085013567ffffffffffffffff81111561250b575f5ffd5b61251787828801612242565b935050604085013567ffffffffffffffff811115612533575f5ffd5b8501601f81018713612543575f5ffd5b803567ffffffffffffffff811115612559575f5ffd5b8760208260051b840101111561256d575f5ffd5b949793965060200194505050565b5f5f6040838503121561258c575f5ffd5b50508035926020909101359150565b600381106125ab576125ab612494565b9052565b602081016112e6828461259b565b5f5f858511156125cb575f5ffd5b838611156125d7575f5ffd5b5050820193919092039150565b80357fffffffff000000000000000000000000000000000000000000000000000000008116906004841015612643577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b838152606060208201525f6126ae606083018561264a565b82810360408401526126c0818561264a565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b803560038110612705575f5ffd5b919050565b5f6020828403121561271a575f5ffd5b611bc3826126f7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff81811683821601908111156112e6576112e6612723565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f6127d660208301848661277c565b949350505050565b848152606060208201525f6127f760608301858761277c565b8281036040840152612809818561264a565b979650505050505050565b61ffff815116825273ffffffffffffffffffffffffffffffffffffffff60208201511660208301525f6040820151606060408501526127d6606085018261264a565b604081525f612868604083018561264a565b8281036020840152835181526020840151602082015260408401516040820152606084015160a060608301526128a160a0830182612814565b90506080850151828203608084015281925080518083526020830193506020820192505f91505b808210156128eb57825184526020840193506020830192506001820191506128c8565b50919695505050505050565b5f5f5f60608486031215612909575f5ffd5b83359250602084013567ffffffffffffffff811115612926575f5ffd5b61293286828701612242565b925050604084013567ffffffffffffffff81111561294e575f5ffd5b8401601f8101861361295e575f5ffd5b803561296c61225f826122b5565b8082825260208201915060208360051b85010192508883111561298d575f5ffd5b6020840193505b828410156129b6576129a5846126f7565b825260209384019390910190612994565b809450505050509250925092565b838152606060208201525f6129dc606083018561264a565b8281036040840152835180825260208086019201905f5b81811015612a1957612a0683855161259b565b60209384019392909201916001016129f3565b5090979650505050505050565b80517fff0000000000000000000000000000000000000000000000000000000000000081168114612705575f5ffd5b80518015158114612705575f5ffd5b5f82601f830112612a73575f5ffd5b8151612a8161225f826121fd565b818152846020838601011115612a95575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f82601f830112612ac0575f5ffd5b8151612ace61225f826122b5565b8082825260208201915060208360051b860101925085831115612aef575f5ffd5b602085015b8381101561233357805167ffffffffffffffff811115612b12575f5ffd5b860160c08189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215612b45575f5ffd5b612b4d61218b565b612b5960208301612a26565b8152612b6760408301612a55565b60208201526060820151612b7a81612294565b60408201526080820151612b8d81612294565b606082015260a0820151608082015260c082015167ffffffffffffffff811115612bb5575f5ffd5b612bc48a602083860101612a64565b60a08301525084525060209283019201612af4565b5f60608284031215612be9575f5ffd5b612bf1612168565b9050815167ffffffffffffffff811115612c09575f5ffd5b612c1584828501612a64565b825250602082015167ffffffffffffffff811115612c31575f5ffd5b612c3d84828501612a64565b602083015250612c4f60408301612a55565b604082015292915050565b5f60208284031215612c6a575f5ffd5b815167ffffffffffffffff811115612c80575f5ffd5b820160c08185031215612c91575f5ffd5b612c9961218b565b612ca282612a26565b8152602082810151908201526040808301519082015260608083015190820152608082015167ffffffffffffffff811115612cdb575f5ffd5b612ce786828501612ab1565b60808301525060a082015167ffffffffffffffff811115612d06575f5ffd5b612d1286828501612bd9565b60a083015250949350505050565b602081525f611bc3602083018461264a565b5f81518060208401855e5f93019283525090919050565b7fffffffff00000000000000000000000000000000000000000000000000000000861681527fff000000000000000000000000000000000000000000000000000000000000008560f81b1660048201525f612da76005830186612d32565b60f89490941b7fff00000000000000000000000000000000000000000000000000000000000000168452505060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018201526015019392505050565b7fff00000000000000000000000000000000000000000000000000000000000000831681525f6127d66001830184612d32565b85815284602082015283604082015260a060608201525f612e5e60a0830185612814565b8281036080840152835180825260208086019201905f5b81811015612e93578351835260209384019390920191600101612e75565b50909998505050505050505050565b5f60208284031215612eb2575f5ffd5b611bc382612a55565b5f60208284031215612ecb575f5ffd5b5051919050565b5f60208284031215612ee2575f5ffd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114611bc3575f5ffd5b80820281158282048414176112e6576112e6612723565b818103818111156112e6576112e6612723565b803560208310156112e6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116906014841015612643577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808560140360031b1b82161691505092915050565b828152604060208201525f6127d6604083018461264a565b80516020808301519190811015613033577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b805160208201517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081169190601482101561309e577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808360140360031b1b82161692505b505091905056fea26469706673582212205970c3329ac2e08aa803b82e66820557e7fc1a696231ba8b2c5321a1240db23864736f6c634300081c0033" + "0x608060405260043610610079575f3560e01c80637e4fbbde1161004c5780637e4fbbde146101285780639848391814610163578063aac0ac4614610182578063fdf736a3146101c8575f5ffd5b80632432ef261461007d5780632949e7b7146100c65780632f90b184146100e7578063743565a614610109575b5f5ffd5b61009061008b3660046122ff565b6101e7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b3480156100d1575f5ffd5b506100e56100e03660046125c6565b6103f5565b005b3480156100f2575f5ffd5b506100fb5f5481565b6040519081526020016100bd565b348015610114575f5ffd5b506100e56101233660046125c6565b6107ce565b348015610133575f5ffd5b50610156610142366004612706565b60016020525f908152604090205460ff1681565b6040516100bd919061274a565b34801561016e575f5ffd5b506100e561017d366004612764565b6109d2565b34801561018d575f5ffd5b506101bb61019c366004612804565b600260209081525f928352604080842090915290825290205460ff1681565b6040516100bd9190612838565b3480156101d3575f5ffd5b506100e56101e2366004612706565b610faa565b5f33308114610240576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b505f61024f6004828587612846565b6102589161286d565b90505f5f6102668888611029565b90925090507fd6b61849000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008416016102c7576102c2868684848c8c611082565b6103c7565b7f8bca9a5a000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084160161031a576102c286866111e4565b7f67b7c6e8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000841601610371576102c2868684848c8c611276565b6040517f12ba286f0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000084166004820152602401610237565b507f2432ef260000000000000000000000000000000000000000000000000000000098975050505050505050565b5f5f5f61040585855f01516113d2565b865160208401519396509194509250839190818114610461576040517f534ab1b2000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610237565b50505060408301518290468181146104b6576040517f4534e972000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610237565b5050505f6201000060046104ca9190612900565b73ffffffffffffffffffffffffffffffffffffffff1663cb944dec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610512573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610536919061292c565b60608501519091508390829080821461058c576040517fb99d46dc000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610237565b50505060c084015151511561063d575f5f6105ad8660c001515f0151611497565b9092509050333014806105e85750468214806105c7575081155b80156105e8575073ffffffffffffffffffffffffffffffffffffffff811633145b856105f346336114ea565b8860c001515f0151909192610637576040517fe845be4c0000000000000000000000000000000000000000000000000000000081526004016102379392919061298f565b50505050505b5f8260038111156106505761065061271d565b148061066d5750600182600381111561066b5761066b61271d565b145b83906106a8576040517f5bba511100000000000000000000000000000000000000000000000000000000815260040161023791815260200190565b5060018260038111156106bd576106bd61271d565b146106cd576106cd86868561154c565b5f83815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600217905560a085015151905b8181101561075d575f858152600260209081526040808320848452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091550161070b565b50602085015161079b90858760015f604051908082528060200260200182016040528015610795578160200160208202803683370190505b50611890565b60405184907fdd0fe78c1153f6af3f72afd04381692d6ee5747db36a59c9fec395ad369d3625905f90a250505050505050565b5f5f5f6107de85855f01516113d2565b86516020840151939650919450925083919081811461083a576040517f534ab1b2000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610237565b505050604083015182904681811461088f576040517f4534e972000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610237565b5050505f6201000060046108a39190612900565b73ffffffffffffffffffffffffffffffffffffffff1663cb944dec6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090f919061292c565b606085015190915083908290808214610965576040517fb99d46dc000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610237565b505f91506109709050565b8260038111156109825761098261271d565b1483906109be576040517f5bba511100000000000000000000000000000000000000000000000000000000815260040161023791815260200190565b506109ca86868561154c565b505050505050565b5f546109e1618000600b612900565b73ffffffffffffffffffffffffffffffffffffffff16639413cd326040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4d919061292c565b03610a84576040517f472477e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f610a9186886113d2565b60208301519295509093509150829088818114610aeb576040517f534ab1b2000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610237565b5050506040830151829046818114610b40576040517f4534e972000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610237565b5050505f5f610b568560c0015160200151611497565b909250905033301480610b91575046821480610b70575081155b8015610b91575073ffffffffffffffffffffffffffffffffffffffff811633145b84610b9c46336114ea565b8760c0015160200151909192610be1576040517f0345c2810000000000000000000000000000000000000000000000000000000081526004016102379392919061298f565b50505060a08501515186818114610c2d576040517f801534e900000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610237565b5060019050836003811115610c4457610c4461271d565b1480610c6157506003836003811115610c5f57610c5f61271d565b145b8490610c9c576040517ff729f26d00000000000000000000000000000000000000000000000000000000815260040161023791815260200190565b505f84815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600317905560a086015151905b81811015610f34575f86815260026020908152604080832084845290915281205460ff16908a8a84818110610d1257610d126129c3565b9050602002016020810190610d279190612a03565b90506001816002811115610d3d57610d3d61271d565b03610e21575f826002811115610d5557610d5561271d565b1488849091610d99576040517fc087b72700000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610237565b50505f88815260026020908152604080832086845290915290208054600191907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168280021790555082887f3cd077a28cf869e00954d27389bcc31fe5b102eab4ebdae82fb94fbdcc375f4a6001604051610e149190612838565b60405180910390a3610f2a565b6002816002811115610e3557610e3561271d565b03610f2a576001826002811115610e4e57610e4e61271d565b141588849091610e93576040517fd5c7a37600000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610237565b505f9050826002811115610ea957610ea961271d565b03610f2a575f8881526002602081815260408084208785529091529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682179055905184918a917f3cd077a28cf869e00954d27389bcc31fe5b102eab4ebdae82fb94fbdcc375f4a91610f2191612838565b60405180910390a35b5050600101610cdb565b50610f748a86885f8c8c808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061189092505050565b60405185907fcbcf7285f516f8a98b3ff4620dc76c656cce11fe9902ee012f43814dceb0e0c4905f90a250505050505050505050565b610fb2611bb8565b610fbf618000600f612900565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611025576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610237565b5f55565b5f5f5f6110368585611c1b565b90945092509050848482611078576040517fe7c8d4cf000000000000000000000000000000000000000000000000000000008152600401610237929190612a63565b5050509250929050565b5f80611091876004818b612846565b81019061109e91906125c6565b915091505f6110b083835f01516113d2565b505060c081015151519091501561116e575f5f6110d38360c001515f0151611497565b91509150888214806110e3575081155b801561111a57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b8551602087012060c085015151909189918991611167576040517fe845be4c0000000000000000000000000000000000000000000000000000000081526004016102379493929190612a7e565b5050505050505b6040517f2949e7b70000000000000000000000000000000000000000000000000000000081523090632949e7b7906111ac9086908690600401612af6565b5f604051808303815f87803b1580156111c3575f5ffd5b505af11580156111d5573d5f5f3e3d5ffd5b50505050505050505050505050565b5f806111f38360048187612846565b81019061120091906125c6565b6040517f743565a60000000000000000000000000000000000000000000000000000000081529193509150309063743565a6906112439085908590600401612af6565b5f604051808303815f87803b15801561125a575f5ffd5b505af115801561126c573d5f5f3e3d5ffd5b5050505050505050565b5f8080611286886004818c612846565b8101906112939190612b97565b9250925092505f6112a483856113d2565b505090505f5f6112bb8360c0015160200151611497565b91509150898214806112cb575081155b801561130257508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b858051906020012089898660c001516020015190919293611353576040517f0345c2810000000000000000000000000000000000000000000000000000000081526004016102379493929190612a7e565b50506040517f984839180000000000000000000000000000000000000000000000000000000081523092506398483918915061139790899089908990600401612c64565b5f604051808303815f87803b1580156113ae575f5ffd5b505af11580156113c0573d5f5f3e3d5ffd5b50505050505050505050505050505050565b6113da61223e565b5f5f848060200190518101906113f09190612efa565b80519093507fff00000000000000000000000000000000000000000000000000000000000000167f01000000000000000000000000000000000000000000000000000000000000001461146f576040517feae192ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114798486611cd9565b5f81815260016020526040902054939690955060ff90931693505050565b5f5f5f6114a384611d0b565b9094509250905083816114e3576040517fe7c8d4cf0000000000000000000000000000000000000000000000000000000081526004016102379190612fca565b5050915091565b60605f6114f684611dc4565b8051604051919250611533917e01000000000000000000000000000000000000000000000000000000000000919084906014908890602001612ff3565b6040516020818303038152906040529150505b92915050565b61155a62010000600d612900565b73ffffffffffffffffffffffffffffffffffffffff1682606001516020015173ffffffffffffffffffffffffffffffffffffffff161462010000600d6115a09190612900565b8360600151602001519091611601576040517f89fd2c7600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610237565b5050604051611636907f01000000000000000000000000000000000000000000000000000000000000009085906020016130b1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152606084015101525f61167a620100006009612900565b73ffffffffffffffffffffffffffffffffffffffff166318b7fc22845f015185602001518660400151876060015188608001516040518663ffffffff1660e01b81526004016116cd9594939291906130e4565b602060405180830381865afa1580156116e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170c919061314c565b905080611745576040517f32c2e15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905561178b6180006008612900565b604080517f743565a600000000000000000000000000000000000000000000000000000000602082015260248082018690528251808303909101815260448201928390527f62f84b240000000000000000000000000000000000000000000000000000000090925273ffffffffffffffffffffffffffffffffffffffff92909216916362f84b249161181f91604801612fca565b6020604051808303815f875af115801561183b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185f919061292c565b5060405182907f2f34edd4f9447fc2e17c3670ad4e71dc46b3bcc01346abdd20d82801d2118c54905f90a250505050565b60a0830151515f5b81811015611baf57836118f4575f8382815181106118b8576118b86129c3565b60200260200101519050600160028111156118d5576118d561271d565b8160028111156118e7576118e761271d565b146118f25750611ba7565b505b5f8560a00151828151811061190b5761190b6129c3565b602090810291909101015180519091507fff00000000000000000000000000000000000000000000000000000000000000167f010000000000000000000000000000000000000000000000000000000000000014611995576040517fd5f1397300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608081015115611a36576119ac618000600a612900565b60808201516040517f40c10f19000000000000000000000000000000000000000000000000000000008152306004820152602481019190915273ffffffffffffffffffffffffffffffffffffffff91909116906340c10f19906044015f604051808303815f87803b158015611a1f575f5ffd5b505af1158015611a31573d5f5f3e3d5ffd5b505050505b5f816040015173ffffffffffffffffffffffffffffffffffffffff16632432ef2683608001518a86604051602001611a78929190918252602082015260400190565b60405160208183030381529060405280519060200120611a9c8d87606001516114ea565b8660a001516040518563ffffffff1660e01b8152600401611abf9392919061298f565b60206040518083038185885af1158015611adb573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b009190613165565b9050807fffffffff0000000000000000000000000000000000000000000000000000000081167f2432ef260000000000000000000000000000000000000000000000000000000014611ba3576040517f12ba286f0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610237565b5050505b600101611898565b50505050505050565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4805460019091558015611c18576040517fdf3a8fdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f5f5f5f5f365f365f611c2e8b8b611e2a565b955095509550955095509550858015611c6757507fffff0000000000000000000000000000000000000000000000000000000000008516155b8015611c735750602183105b8015611c875750801580611c875750601481145b611c93575f5f5f611cc6565b6001611ca08460086131a4565b611cac906101006131bb565b611cb685876131ce565b901c611cc2838561320a565b60601c5b9850985098505050505050509250925092565b5f8282604051602001611ced92919061326f565b60405160208183030381529060405280519060200120905092915050565b5f5f5f5f5f5f5f611d1b88611fb4565b9350935093509350838015611d5057507fffff0000000000000000000000000000000000000000000000000000000000008316155b8015611d5d575060218251105b8015611d73575080511580611d73575080516014145b611d7f575f5f5f611db3565b600182516008611d8f91906131a4565b611d9b906101006131bb565b611da484613287565b901c611daf836132cc565b60601c5b965096509650505050509193909250565b60605f611dd083612132565b6001019050611e238160200384604051602001611def91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529061219b565b9392505050565b60015f368181816006871015611e5057505f945084935083925082915081905080611faa565b7fffff0000000000000000000000000000000000000000000000000000000000008835167e010000000000000000000000000000000000000000000000000000000000008114611eb257505f9550859450849350839250829150819050611faa565b60028901357fffff0000000000000000000000000000000000000000000000000000000000001695505f89896004818110611eef57611eef6129c3565b919091013560f81c9150506006810160ff16891015611f2257505f9650869550859450849350839250829150611faa9050565b611f35600582810160ff16908b8d612846565b955095505f8a8a8360050160ff16818110611f5257611f526129c3565b919091013560f81c91505081810160060160ff168a1015611f8857505f9750879650869550859450849350839250611faa915050565b611fa260ff60068484018101821691908501168c8e612846565b945094505050505b9295509295509295565b5f5f60608060019350600685511015611fd857505f9250829150606090508061212b565b60208501517fffff000000000000000000000000000000000000000000000000000000000000167e01000000000000000000000000000000000000000000000000000000000000811461203857505f93508392506060915081905061212b565b60228601517fffff0000000000000000000000000000000000000000000000000000000000001693505f86600481518110612075576120756129c3565b602001015160f81c60f81b60f81c90508060060160ff16875110156120a957505f94508493506060925082915061212b9050565b6120ba87600560ff848201166121a5565b93505f878260050160ff16815181106120d5576120d56129c3565b602001015160f81c60f81b60f81c905080826006010160ff168851101561210c57505f95508594506060935083925061212b915050565b61212588600684810160ff9081169185870101166121a5565b93505050505b9193509193565b5f80608083901c156121495760809290921c916010015b604083901c1561215e5760409290921c916008015b602083901c156121735760209290921c916004015b601083901c156121885760109290921c916002015b600883901c156115465760010192915050565b6060611e23838385515b82516060906121b48382612229565b92506121c08484612229565b93505f6121cd85856131bb565b67ffffffffffffffff8111156121e5576121e5612378565b6040519080825280601f01601f19166020018201604052801561220f576020820181803683370190505b509050848403856020880101602083015e95945050505050565b5f8183106122375781611e23565b5090919050565b6040518060e001604052805f7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020015f81526020015f81526020015f81526020015f8152602001606081526020016122b5604051806060016040528060608152602001606081526020015f151581525090565b905290565b5f5f83601f8401126122ca575f5ffd5b50813567ffffffffffffffff8111156122e1575f5ffd5b6020830191508360208285010111156122f8575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612313575f5ffd5b85359450602086013567ffffffffffffffff811115612330575f5ffd5b61233c888289016122ba565b909550935050604086013567ffffffffffffffff81111561235b575f5ffd5b612367888289016122ba565b969995985093965092949392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160a0810167ffffffffffffffff811182821017156123c8576123c8612378565b60405290565b6040516060810167ffffffffffffffff811182821017156123c8576123c8612378565b60405160c0810167ffffffffffffffff811182821017156123c8576123c8612378565b60405160e0810167ffffffffffffffff811182821017156123c8576123c8612378565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561247e5761247e612378565b604052919050565b5f67ffffffffffffffff82111561249f5761249f612378565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126124da575f5ffd5b81356124ed6124e882612486565b612437565b818152846020838601011115612501575f5ffd5b816020850160208301375f918101602001919091529392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611c18575f5ffd5b5f67ffffffffffffffff82111561255757612557612378565b5060051b60200190565b5f82601f830112612570575f5ffd5b813561257e6124e88261253e565b8082825260208201915060208360051b86010192508583111561259f575f5ffd5b602085015b838110156125bc5780358352602092830192016125a4565b5095945050505050565b5f5f604083850312156125d7575f5ffd5b823567ffffffffffffffff8111156125ed575f5ffd5b6125f9858286016124cb565b925050602083013567ffffffffffffffff811115612615575f5ffd5b830160a08186031215612626575f5ffd5b61262e6123a5565b813581526020808301359082015260408083013590820152606082013567ffffffffffffffff81111561265f575f5ffd5b820160608188031215612670575f5ffd5b6126786123ce565b813561ffff81168114612689575f5ffd5b815260208201356126998161251d565b6020820152604082013567ffffffffffffffff8111156126b7575f5ffd5b6126c3898285016124cb565b604083015250606083015250608082013567ffffffffffffffff8111156126e8575f5ffd5b6126f487828501612561565b60808301525080925050509250929050565b5f60208284031215612716575f5ffd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b602081016004831061275e5761275e61271d565b91905290565b5f5f5f5f60608587031215612777575f5ffd5b84359350602085013567ffffffffffffffff811115612794575f5ffd5b6127a0878288016124cb565b935050604085013567ffffffffffffffff8111156127bc575f5ffd5b8501601f810187136127cc575f5ffd5b803567ffffffffffffffff8111156127e2575f5ffd5b8760208260051b84010111156127f6575f5ffd5b949793965060200194505050565b5f5f60408385031215612815575f5ffd5b50508035926020909101359150565b600381106128345761283461271d565b9052565b602081016115468284612824565b5f5f85851115612854575f5ffd5b83861115612860575f5ffd5b5050820193919092039150565b80357fffffffff0000000000000000000000000000000000000000000000000000000081169060048410156128cc577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8181168382160190811115611546576115466128d3565b5f6020828403121561293c575f5ffd5b5051919050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b838152606060208201525f6129a76060830185612943565b82810360408401526129b98185612943565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8035600381106129fe575f5ffd5b919050565b5f60208284031215612a13575f5ffd5b611e23826129f0565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f612a76602083018486612a1c565b949350505050565b848152606060208201525f612a97606083018587612a1c565b8281036040840152612aa98185612943565b979650505050505050565b61ffff815116825273ffffffffffffffffffffffffffffffffffffffff60208201511660208301525f604082015160606040850152612a766060850182612943565b604081525f612b086040830185612943565b8281036020840152835181526020840151602082015260408401516040820152606084015160a06060830152612b4160a0830182612ab4565b90506080850151828203608084015281925080518083526020830193506020820192505f91505b80821015612b8b5782518452602084019350602083019250600182019150612b68565b50919695505050505050565b5f5f5f60608486031215612ba9575f5ffd5b83359250602084013567ffffffffffffffff811115612bc6575f5ffd5b612bd2868287016124cb565b925050604084013567ffffffffffffffff811115612bee575f5ffd5b8401601f81018613612bfe575f5ffd5b8035612c0c6124e88261253e565b8082825260208201915060208360051b850101925088831115612c2d575f5ffd5b6020840193505b82841015612c5657612c45846129f0565b825260209384019390910190612c34565b809450505050509250925092565b838152606060208201525f612c7c6060830185612943565b8281036040840152835180825260208086019201905f5b81811015612cb957612ca6838551612824565b6020938401939290920191600101612c93565b5090979650505050505050565b80517fff00000000000000000000000000000000000000000000000000000000000000811681146129fe575f5ffd5b805180151581146129fe575f5ffd5b5f82601f830112612d13575f5ffd5b8151612d216124e882612486565b818152846020838601011115612d35575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f82601f830112612d60575f5ffd5b8151612d6e6124e88261253e565b8082825260208201915060208360051b860101925085831115612d8f575f5ffd5b602085015b838110156125bc57805167ffffffffffffffff811115612db2575f5ffd5b860160c08189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215612de5575f5ffd5b612ded6123f1565b612df960208301612cc6565b8152612e0760408301612cf5565b60208201526060820151612e1a8161251d565b60408201526080820151612e2d8161251d565b606082015260a0820151608082015260c082015167ffffffffffffffff811115612e55575f5ffd5b612e648a602083860101612d04565b60a08301525084525060209283019201612d94565b5f60608284031215612e89575f5ffd5b612e916123ce565b9050815167ffffffffffffffff811115612ea9575f5ffd5b612eb584828501612d04565b825250602082015167ffffffffffffffff811115612ed1575f5ffd5b612edd84828501612d04565b602083015250612eef60408301612cf5565b604082015292915050565b5f60208284031215612f0a575f5ffd5b815167ffffffffffffffff811115612f20575f5ffd5b820160e08185031215612f31575f5ffd5b612f39612414565b612f4282612cc6565b81526020828101519082015260408083015190820152606080830151908201526080808301519082015260a082015167ffffffffffffffff811115612f85575f5ffd5b612f9186828501612d51565b60a08301525060c082015167ffffffffffffffff811115612fb0575f5ffd5b612fbc86828501612e79565b60c083015250949350505050565b602081525f611e236020830184612943565b5f81518060208401855e5f93019283525090919050565b7fffffffff00000000000000000000000000000000000000000000000000000000861681527fff000000000000000000000000000000000000000000000000000000000000008560f81b1660048201525f6130516005830186612fdc565b60f89490941b7fff00000000000000000000000000000000000000000000000000000000000000168452505060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018201526015019392505050565b7fff00000000000000000000000000000000000000000000000000000000000000831681525f612a766001830184612fdc565b85815284602082015283604082015260a060608201525f61310860a0830185612ab4565b8281036080840152835180825260208086019201905f5b8181101561313d57835183526020938401939092019160010161311f565b50909998505050505050505050565b5f6020828403121561315c575f5ffd5b611e2382612cf5565b5f60208284031215613175575f5ffd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114611e23575f5ffd5b8082028115828204841417611546576115466128d3565b81810381811115611546576115466128d3565b80356020831015611546577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b80357fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081169060148410156128cc577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808560140360031b1b82161691505092915050565b828152604060208201525f612a766040830184612943565b805160208083015191908110156132c6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b805160208201517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000811691906014821015613331577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808360140360031b1b82161692505b505091905056fea26469706673582212203b0687d4e4119f7071f2b4d115094b79460c5cca52b28d67aebd9dde29ff10ee64736f6c634300081c0033" ], [ "0x0000000000000000000000000000000000010008", - "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c80633b43dbde1461004e57806377cfd17114610063578063cca2f7bc1461009c578063fb6200c6146100af575b5f5ffd5b61006161005c36600461042e565b6100c2565b005b61008a61007136600461046c565b5f60208181529281526040808220909352908152205481565b60405190815260200160405180910390f35b6100616100aa3660046104d4565b610159565b6100616100bd366004610513565b610267565b6100cf6180006001610562565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461013a576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6101568135602083013561015160408501856105b9565b6102e2565b50565b6101666180006001610562565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101cc576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610131565b805f5b81811015610261576102598484838181106101ec576101ec61061d565b90506020028101906101fe919061064a565b358585848181106102115761021161061d565b9050602002810190610223919061064a565b602001358686858181106102395761023961061d565b905060200281019061024b919061064a565b6101519060408101906105b9565b6001016101cf565b50505050565b6102746180006001610562565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102da576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610131565b610261848484845b6001811461031c576040517f2f59bd0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8282828161032d5761032d61061d565b905060200201350361036b576040517f9b5f85eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f84815260208181526040808320868452909152902054156103b9576040517f2d48e8cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f8181106103cb576103cb61061d565b5f878152602081815260408083208984528252918290209202939093013590555051839085907f6b451b8422636e45b93bf7f594fa2c1769d039766c4254a6e7f9c0ee1715cdb0906104209086908690610686565b60405180910390a350505050565b5f6020828403121561043e575f5ffd5b813567ffffffffffffffff811115610454575f5ffd5b820160608185031215610465575f5ffd5b9392505050565b5f5f6040838503121561047d575f5ffd5b50508035926020909101359150565b5f5f83601f84011261049c575f5ffd5b50813567ffffffffffffffff8111156104b3575f5ffd5b6020830191508360208260051b85010111156104cd575f5ffd5b9250929050565b5f5f602083850312156104e5575f5ffd5b823567ffffffffffffffff8111156104fb575f5ffd5b6105078582860161048c565b90969095509350505050565b5f5f5f5f60608587031215610526575f5ffd5b8435935060208501359250604085013567ffffffffffffffff81111561054a575f5ffd5b6105568782880161048c565b95989497509550505050565b73ffffffffffffffffffffffffffffffffffffffff81811683821601908111156105b3577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b92915050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126105ec575f5ffd5b83018035915067ffffffffffffffff821115610606575f5ffd5b6020019150600581901b36038213156104cd575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261067c575f5ffd5b9190910192915050565b602081528160208201525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156106bd575f5ffd5b8260051b8085604085013791909101604001939250505056fea26469706673582212200beda6d0b17afc6f5d21e7491abcd4217f34ecd8daaf59deff9b54fc3c84f36464736f6c634300081c0033" + "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c80633b43dbde1461004e57806377cfd17114610063578063cca2f7bc1461009c578063fb6200c6146100af575b5f5ffd5b61006161005c36600461042e565b6100c2565b005b61008a61007136600461046c565b5f60208181529281526040808220909352908152205481565b60405190815260200160405180910390f35b6100616100aa3660046104d4565b610159565b6100616100bd366004610513565b610267565b6100cf6180006001610562565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461013a576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6101568135602083013561015160408501856105b9565b6102e2565b50565b6101666180006001610562565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101cc576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610131565b805f5b81811015610261576102598484838181106101ec576101ec61061d565b90506020028101906101fe919061064a565b358585848181106102115761021161061d565b9050602002810190610223919061064a565b602001358686858181106102395761023961061d565b905060200281019061024b919061064a565b6101519060408101906105b9565b6001016101cf565b50505050565b6102746180006001610562565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102da576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610131565b610261848484845b6001811461031c576040517f2f59bd0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8282828161032d5761032d61061d565b905060200201350361036b576040517f9b5f85eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f84815260208181526040808320868452909152902054156103b9576040517f2d48e8cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f8181106103cb576103cb61061d565b5f878152602081815260408083208984528252918290209202939093013590555051839085907f6b451b8422636e45b93bf7f594fa2c1769d039766c4254a6e7f9c0ee1715cdb0906104209086908690610686565b60405180910390a350505050565b5f6020828403121561043e575f5ffd5b813567ffffffffffffffff811115610454575f5ffd5b820160608185031215610465575f5ffd5b9392505050565b5f5f6040838503121561047d575f5ffd5b50508035926020909101359150565b5f5f83601f84011261049c575f5ffd5b50813567ffffffffffffffff8111156104b3575f5ffd5b6020830191508360208260051b85010111156104cd575f5ffd5b9250929050565b5f5f602083850312156104e5575f5ffd5b823567ffffffffffffffff8111156104fb575f5ffd5b6105078582860161048c565b90969095509350505050565b5f5f5f5f60608587031215610526575f5ffd5b8435935060208501359250604085013567ffffffffffffffff81111561054a575f5ffd5b6105568782880161048c565b95989497509550505050565b73ffffffffffffffffffffffffffffffffffffffff81811683821601908111156105b3577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b92915050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126105ec575f5ffd5b83018035915067ffffffffffffffff821115610606575f5ffd5b6020019150600581901b36038213156104cd575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261067c575f5ffd5b9190910192915050565b602081528160208201525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156106bd575f5ffd5b8260051b8085604085013791909101604001939250505056fea26469706673582212203a19e406bf7a036256456ff36e34605bcc68b88ae13c5399eb10969199a6a5b164736f6c634300081c0033" ], [ "0x0000000000000000000000000000000000010009", - "0x608060405234801561000f575f5ffd5b506004361061006f575f3560e01c806379cf61651161004d57806379cf6165146100c0578063da24b3ee146100d3578063e896760d146100e6575f5ffd5b806318b7fc2214610073578063353d71281461009a578063685143b9146100ad575b5f5ffd5b610086610081366004610dbd565b6100f9565b604051901515815260200160405180910390f35b6100866100a8366004610e47565b610125565b6100866100bb366004610eb4565b610143565b6100866100ce366004610eeb565b610262565b6100866100e1366004610f48565b610271565b6100866100f4366004610fd3565b61029c565b5f61011887878761011161010c89611137565b6102b2565b8787610368565b90505b9695505050505050565b5f6101358888888888888861038f565b90505b979650505050505050565b5f5f60405180606001604052808460800160208101906101639190611214565b61ffff16815260200161017c608086016060870161122d565b73ffffffffffffffffffffffffffffffffffffffff1681526020016101a460a0860186611246565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509152509050306318b7fc22843560208601356040870135856101fb60c08a018a6112a7565b6040518763ffffffff1660e01b815260040161021c96959493929190611354565b602060405180830381865afa158015610237573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061025b9190611415565b9392505050565b5f61011887878787878761055d565b5f5f61027e868a8561056d565b905061028e8a8989848989610368565b9a9950505050505050505050565b5f61011887878761011136899003890189611430565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101919091526040805160c0810182525f815260016020820152835161ffff16918101919091526060810161031561800060086114db565b73ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff165f1b81526020018360400151805190602001208152509050919050565b5f5f61037385610611565b905061038388888884888861055d565b98975050505050505050565b5f5f61039f8989898989896106f6565b90508060e001511561046d575f6103ba6201000060086114db565b6040517f77cfd171000000000000000000000000000000000000000000000000000000008152600481018c9052602481018b905273ffffffffffffffffffffffffffffffffffffffff91909116906377cfd17190604401602060405180830381865afa15801561042c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104509190611507565b905081608001518114801561046457508015155b92505050610138565b826001036104a7576040517f68d91b4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663353d7128825f0151836020015184604001518560a001516104e58b8b8960c001516109c5565b6104f08a600161151e565b6040518763ffffffff1660e01b815260040161051196959493929190611531565b602060405180830381865afa15801561052c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105509190611415565b9998505050505050505050565b5f6101188787878787875f61038f565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101919091526040518060c001604052805f60ff1681526020016001151581526020018561ffff16815260200161800060016105d491906114db565b73ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018360018111156106075761060761159b565b9052949350505050565b80516020808301516040808501516060860151608087015160a088015193515f976106d997909695910160f896871b7fff0000000000000000000000000000000000000000000000000000000000000016815294151590951b600185015260f09290921b7fffff00000000000000000000000000000000000000000000000000000000000016600284015260601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660048301526018820152603881019190915260580190565b604051602081830303815290604052805190602001209050919050565b6107386040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f151581525090565b5f829003610772576040517f8e23ac1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f8d5411ba4a61cbb507591adfdbe3b8bb500d912bee0b3b4ff0750f652525bc4684016107cb576040517fd356e6ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6107d684846109db565b805160c0840181905260208201519192505f9161080b9161080491889188916107ff908261151e565b610b0a565b8888610bb6565b905081602001518360c001818151610823919061151e565b90525060808301819052606082018051151560e0850152511561084757505061011b565b5f610852828a610c5d565b90505f86868660c0015181811061086b5761086b6115c8565b905060200201355f1c90508460c0018051610885906115f5565b905260c085015160408501515f916108b1916108aa918b918b91906107ff908261151e565b8385610bb6565b905084604001518660c0018181516108c9919061151e565b9052506108d6818d610cb9565b8660a0018181525050505050505f5f5f5f87878760c001518181106108fd576108fd6115c8565b905060200201355f1c90508560c0018051610917906115f5565b905260c0860151608082901c93506fffffffffffffffffffffffffffffffff821692508890889081811061094d5761094d6115c8565b905060200201355f1c93508560c0018051610967906115f5565b90525060408051610100810182529384526020840192909252828201528201516060808301919091526080848101519083015260a0808501519083015260c09384015193820193909352910151151560e08201529695505050505050565b60606109d384848481610b0a565b949350505050565b610a0460405180608001604052805f81526020015f81526020015f81526020015f151581525090565b5f83835f818110610a1757610a176115c8565b6020908102929092013592505081901b5f819003610a9f578160f881901c600114610a78576040517f79274f0400000000000000000000000000000000000000000000000000000000815260f882901c600482015260240160405180910390fd5b600180855283901a60208501528260021a60408501528260031a1515606085015250610ab7565b5f808452602084018590526040840152600160608401525b82606001518015610acb5750604083015115155b15610b02576040517f48c5fa2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505092915050565b6060610b16838361162c565b67ffffffffffffffff811115610b2e57610b2e61104c565b604051908082528060200260200182016040528015610b57578160200160208202803683370190505b509050825b82811015610bad57858582818110610b7657610b766115c8565b90506020020135828583610b8a919061162c565b81518110610b9a57610b9a6115c8565b6020908102919091010152600101610b5c565b50949350505050565b82515f90610bc48482610cfa565b825f5b82811015610c5357610bda60028761166c565b15610c1057610c0b878281518110610bf457610bf46115c8565b6020026020010151835f9182526020526040902090565b610c3c565b610c3c82888381518110610c2657610c266115c8565b60200260200101515f9182526020526040902090565b9150610c4960028761167f565b9550600101610bc7565b5095945050505050565b604080517fd82fec4a37cbdc47f1e5cc4ad64deacf34a48e6f7c61fa5b68fd58e543259cf46020820152908101839052606081018290525f906080015b6040516020818303038152906040528051906020012090505b92915050565b604080517f39bc69363bb9e26cf14240de4e22569e95cf175cfbcf1ade1a47a253b4bf7f616020820152908101839052606081018290525f90608001610c9a565b6101008110610d35576040517f1c50038500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001811b8210610d71576040517f9bb54c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b5f5f83601f840112610d85575f5ffd5b50813567ffffffffffffffff811115610d9c575f5ffd5b6020830191508360208260051b8501011115610db6575f5ffd5b9250929050565b5f5f5f5f5f5f60a08789031215610dd2575f5ffd5b863595506020870135945060408701359350606087013567ffffffffffffffff811115610dfd575f5ffd5b87016060818a031215610e0e575f5ffd5b9250608087013567ffffffffffffffff811115610e29575f5ffd5b610e3589828a01610d75565b979a9699509497509295939492505050565b5f5f5f5f5f5f5f60c0888a031215610e5d575f5ffd5b87359650602088013595506040880135945060608801359350608088013567ffffffffffffffff811115610e8f575f5ffd5b610e9b8a828b01610d75565b989b979a5095989497959660a090950135949350505050565b5f60208284031215610ec4575f5ffd5b813567ffffffffffffffff811115610eda575f5ffd5b820160e0818503121561025b575f5ffd5b5f5f5f5f5f5f60a08789031215610f00575f5ffd5b86359550602087013594506040870135935060608701359250608087013567ffffffffffffffff811115610e29575f5ffd5b803561ffff81168114610f43575f5ffd5b919050565b5f5f5f5f5f5f5f5f60e0898b031215610f5f575f5ffd5b88359750602089013596506040890135955060608901359450610f8460808a01610f32565b935060a089013567ffffffffffffffff811115610f9f575f5ffd5b610fab8b828c01610d75565b90945092505060c089013560028110610fc2575f5ffd5b809150509295985092959890939650565b5f5f5f5f5f5f868803610140811215610fea575f5ffd5b87359650602088013595506040880135945060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08201121561102b575f5ffd5b5060608701925061012087013567ffffffffffffffff811115610e29575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561109c5761109c61104c565b60405290565b60405160c0810167ffffffffffffffff8111828210171561109c5761109c61104c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561110c5761110c61104c565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f43575f5ffd5b5f60608236031215611147575f5ffd5b61114f611079565b61115883610f32565b815261116660208401611114565b6020820152604083013567ffffffffffffffff811115611184575f5ffd5b830136601f820112611194575f5ffd5b803567ffffffffffffffff8111156111ae576111ae61104c565b6111df60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016110c5565b8181523660208385010111156111f3575f5ffd5b816020840160208301375f9181016020019190915260408301525092915050565b5f60208284031215611224575f5ffd5b61025b82610f32565b5f6020828403121561123d575f5ffd5b61025b82611114565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611279575f5ffd5b83018035915067ffffffffffffffff821115611293575f5ffd5b602001915036819003821315610db6575f5ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126112da575f5ffd5b83018035915067ffffffffffffffff8211156112f4575f5ffd5b6020019150600581901b3603821315610db6575f5ffd5b8183525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561133b575f5ffd5b8260051b80836020870137939093016020019392505050565b86815285602082015284604082015260a0606082015261ffff84511660a082015273ffffffffffffffffffffffffffffffffffffffff60208501511660c08201525f6040850151606060e0840152805180610100850152806020830161012086015e5f61012082860101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f82011684019150506101208382030160808401526105506101208201858761130b565b8015158114611412575f5ffd5b50565b5f60208284031215611425575f5ffd5b815161025b81611405565b5f60c0828403128015611441575f5ffd5b5061144a6110a2565b823560ff8116811461145a575f5ffd5b8152602083013561146a81611405565b602082015261147b60408401610f32565b604082015261148c60608401611114565b60608201526080838101359082015260a0928301359281019290925250919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8181168382160190811115610cb357610cb36114ae565b5f60208284031215611517575f5ffd5b5051919050565b80820180821115610cb357610cb36114ae565b5f60c0820188835287602084015286604084015285606084015260c0608084015280855180835260e0850191506020870192505f5b81811015611584578351835260209384019390920191600101611566565b505060a09390930193909352509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611625576116256114ae565b5060010190565b81810381811115610cb357610cb36114ae565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8261167a5761167a61163f565b500690565b5f8261168d5761168d61163f565b50049056fea26469706673582212202b0f830e1b70e17b5a33c1b376571d52ef776b77678c5f298b5472af4b89242a64736f6c634300081c0033" + "0x608060405234801561000f575f5ffd5b506004361061006f575f3560e01c806379cf61651161004d57806379cf6165146100c0578063da24b3ee146100d3578063e896760d146100e6575f5ffd5b806318b7fc2214610073578063353d71281461009a578063685143b9146100ad575b5f5ffd5b610086610081366004610dbd565b6100f9565b604051901515815260200160405180910390f35b6100866100a8366004610e47565b610125565b6100866100bb366004610eb4565b610143565b6100866100ce366004610eeb565b610262565b6100866100e1366004610f48565b610271565b6100866100f4366004610fd3565b61029c565b5f61011887878761011161010c89611137565b6102b2565b8787610368565b90505b9695505050505050565b5f6101358888888888888861038f565b90505b979650505050505050565b5f5f60405180606001604052808460800160208101906101639190611214565b61ffff16815260200161017c608086016060870161122d565b73ffffffffffffffffffffffffffffffffffffffff1681526020016101a460a0860186611246565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509152509050306318b7fc22843560208601356040870135856101fb60c08a018a6112a7565b6040518763ffffffff1660e01b815260040161021c96959493929190611354565b602060405180830381865afa158015610237573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061025b9190611415565b9392505050565b5f61011887878787878761055d565b5f5f61027e868a8561056d565b905061028e8a8989848989610368565b9a9950505050505050505050565b5f61011887878761011136899003890189611430565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101919091526040805160c0810182525f815260016020820152835161ffff16918101919091526060810161031561800060086114db565b73ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff165f1b81526020018360400151805190602001208152509050919050565b5f5f61037385610611565b905061038388888884888861055d565b98975050505050505050565b5f5f61039f8989898989896106f6565b90508060e001511561046d575f6103ba6201000060086114db565b6040517f77cfd171000000000000000000000000000000000000000000000000000000008152600481018c9052602481018b905273ffffffffffffffffffffffffffffffffffffffff91909116906377cfd17190604401602060405180830381865afa15801561042c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104509190611507565b905081608001518114801561046457508015155b92505050610138565b826001036104a7576040517f68d91b4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663353d7128825f0151836020015184604001518560a001516104e58b8b8960c001516109c5565b6104f08a600161151e565b6040518763ffffffff1660e01b815260040161051196959493929190611531565b602060405180830381865afa15801561052c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105509190611415565b9998505050505050505050565b5f6101188787878787875f61038f565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101919091526040518060c001604052805f60ff1681526020016001151581526020018561ffff16815260200161800060016105d491906114db565b73ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018360018111156106075761060761159b565b9052949350505050565b80516020808301516040808501516060860151608087015160a088015193515f976106d997909695910160f896871b7fff0000000000000000000000000000000000000000000000000000000000000016815294151590951b600185015260f09290921b7fffff00000000000000000000000000000000000000000000000000000000000016600284015260601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660048301526018820152603881019190915260580190565b604051602081830303815290604052805190602001209050919050565b6107386040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f151581525090565b5f829003610772576040517f8e23ac1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f8d5411ba4a61cbb507591adfdbe3b8bb500d912bee0b3b4ff0750f652525bc4684016107cb576040517fd356e6ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6107d684846109db565b805160c0840181905260208201519192505f9161080b9161080491889188916107ff908261151e565b610b0a565b8888610bb6565b905081602001518360c001818151610823919061151e565b90525060808301819052606082018051151560e0850152511561084757505061011b565b5f610852828a610c5d565b90505f86868660c0015181811061086b5761086b6115c8565b905060200201355f1c90508460c0018051610885906115f5565b905260c085015160408501515f916108b1916108aa918b918b91906107ff908261151e565b8385610bb6565b905084604001518660c0018181516108c9919061151e565b9052506108d6818d610cb9565b8660a0018181525050505050505f5f5f5f87878760c001518181106108fd576108fd6115c8565b905060200201355f1c90508560c0018051610917906115f5565b905260c0860151608082901c93506fffffffffffffffffffffffffffffffff821692508890889081811061094d5761094d6115c8565b905060200201355f1c93508560c0018051610967906115f5565b90525060408051610100810182529384526020840192909252828201528201516060808301919091526080848101519083015260a0808501519083015260c09384015193820193909352910151151560e08201529695505050505050565b60606109d384848481610b0a565b949350505050565b610a0460405180608001604052805f81526020015f81526020015f81526020015f151581525090565b5f83835f818110610a1757610a176115c8565b6020908102929092013592505081901b5f819003610a9f578160f881901c600114610a78576040517f79274f0400000000000000000000000000000000000000000000000000000000815260f882901c600482015260240160405180910390fd5b600180855283901a60208501528260021a60408501528260031a1515606085015250610ab7565b5f808452602084018590526040840152600160608401525b82606001518015610acb5750604083015115155b15610b02576040517f48c5fa2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505092915050565b6060610b16838361162c565b67ffffffffffffffff811115610b2e57610b2e61104c565b604051908082528060200260200182016040528015610b57578160200160208202803683370190505b509050825b82811015610bad57858582818110610b7657610b766115c8565b90506020020135828583610b8a919061162c565b81518110610b9a57610b9a6115c8565b6020908102919091010152600101610b5c565b50949350505050565b82515f90610bc48482610cfa565b825f5b82811015610c5357610bda60028761166c565b15610c1057610c0b878281518110610bf457610bf46115c8565b6020026020010151835f9182526020526040902090565b610c3c565b610c3c82888381518110610c2657610c266115c8565b60200260200101515f9182526020526040902090565b9150610c4960028761167f565b9550600101610bc7565b5095945050505050565b604080517fd82fec4a37cbdc47f1e5cc4ad64deacf34a48e6f7c61fa5b68fd58e543259cf46020820152908101839052606081018290525f906080015b6040516020818303038152906040528051906020012090505b92915050565b604080517f39bc69363bb9e26cf14240de4e22569e95cf175cfbcf1ade1a47a253b4bf7f616020820152908101839052606081018290525f90608001610c9a565b6101008110610d35576040517f1c50038500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001811b8210610d71576040517f9bb54c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b5f5f83601f840112610d85575f5ffd5b50813567ffffffffffffffff811115610d9c575f5ffd5b6020830191508360208260051b8501011115610db6575f5ffd5b9250929050565b5f5f5f5f5f5f60a08789031215610dd2575f5ffd5b863595506020870135945060408701359350606087013567ffffffffffffffff811115610dfd575f5ffd5b87016060818a031215610e0e575f5ffd5b9250608087013567ffffffffffffffff811115610e29575f5ffd5b610e3589828a01610d75565b979a9699509497509295939492505050565b5f5f5f5f5f5f5f60c0888a031215610e5d575f5ffd5b87359650602088013595506040880135945060608801359350608088013567ffffffffffffffff811115610e8f575f5ffd5b610e9b8a828b01610d75565b989b979a5095989497959660a090950135949350505050565b5f60208284031215610ec4575f5ffd5b813567ffffffffffffffff811115610eda575f5ffd5b820160e0818503121561025b575f5ffd5b5f5f5f5f5f5f60a08789031215610f00575f5ffd5b86359550602087013594506040870135935060608701359250608087013567ffffffffffffffff811115610e29575f5ffd5b803561ffff81168114610f43575f5ffd5b919050565b5f5f5f5f5f5f5f5f60e0898b031215610f5f575f5ffd5b88359750602089013596506040890135955060608901359450610f8460808a01610f32565b935060a089013567ffffffffffffffff811115610f9f575f5ffd5b610fab8b828c01610d75565b90945092505060c089013560028110610fc2575f5ffd5b809150509295985092959890939650565b5f5f5f5f5f5f868803610140811215610fea575f5ffd5b87359650602088013595506040880135945060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08201121561102b575f5ffd5b5060608701925061012087013567ffffffffffffffff811115610e29575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561109c5761109c61104c565b60405290565b60405160c0810167ffffffffffffffff8111828210171561109c5761109c61104c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561110c5761110c61104c565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f43575f5ffd5b5f60608236031215611147575f5ffd5b61114f611079565b61115883610f32565b815261116660208401611114565b6020820152604083013567ffffffffffffffff811115611184575f5ffd5b830136601f820112611194575f5ffd5b803567ffffffffffffffff8111156111ae576111ae61104c565b6111df60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016110c5565b8181523660208385010111156111f3575f5ffd5b816020840160208301375f9181016020019190915260408301525092915050565b5f60208284031215611224575f5ffd5b61025b82610f32565b5f6020828403121561123d575f5ffd5b61025b82611114565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611279575f5ffd5b83018035915067ffffffffffffffff821115611293575f5ffd5b602001915036819003821315610db6575f5ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126112da575f5ffd5b83018035915067ffffffffffffffff8211156112f4575f5ffd5b6020019150600581901b3603821315610db6575f5ffd5b8183525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561133b575f5ffd5b8260051b80836020870137939093016020019392505050565b86815285602082015284604082015260a0606082015261ffff84511660a082015273ffffffffffffffffffffffffffffffffffffffff60208501511660c08201525f6040850151606060e0840152805180610100850152806020830161012086015e5f61012082860101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f82011684019150506101208382030160808401526105506101208201858761130b565b8015158114611412575f5ffd5b50565b5f60208284031215611425575f5ffd5b815161025b81611405565b5f60c0828403128015611441575f5ffd5b5061144a6110a2565b823560ff8116811461145a575f5ffd5b8152602083013561146a81611405565b602082015261147b60408401610f32565b604082015261148c60608401611114565b60608201526080838101359082015260a0928301359281019290925250919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8181168382160190811115610cb357610cb36114ae565b5f60208284031215611517575f5ffd5b5051919050565b80820180821115610cb357610cb36114ae565b5f60c0820188835287602084015286604084015285606084015260c0608084015280855180835260e0850191506020870192505f5b81811015611584578351835260209384019390920191600101611566565b505060a09390930193909352509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611625576116256114ae565b5060010190565b81810381811115610cb357610cb36114ae565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8261167a5761167a61163f565b500690565b5f8261168d5761168d61163f565b50049056fea264697066735822122009ff53341c38e01ed4b6d26440bda18b781bff3f3a23b99bc4a01397c18d703a64736f6c634300081c0033" ], [ "0x0000000000000000000000000000000000008006", @@ -97,18 +97,21 @@ "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000000000000000000000000000000000000000800f" } }, - "additional_preimages": [ - ["0x49d1759eb6d2cd7eda55639c305253810d31f5d50cea1ede0be519ccbb1d8a93", "0x0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"] - ], - "genesis_root": "0x1ceb63a1dc5ae4ff7ada8509027dfcfd16929e3cf62d3bd17b025f2a834454f0", + "genesis_root": "0x683971208cd27f1bbe4eff7d992d850245115d0d3b7755367eddf784577fa18e", "protocol_semantic_version": { "major": 0, "minor": 31, "patch": 0 }, "execution_version": 5, + "additional_preimages": [ + [ + "0x49d1759eb6d2cd7eda55639c305253810d31f5d50cea1ede0be519ccbb1d8a93", + "0x0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ] + ], "prover": { "fflonk_snark_wrapper_vk_hash": "0x49eae0bf5c7ea580f4979b366e52b386adc5f42e2ce50fc1d3c4de9a86052bff", "recursion_scheduler_level_vk_hash": "0x1ffc56111a5cfaf5db387f6a31408ad20217e9bc1f31f2f5c1bd38b0d6d7968b" } -} \ No newline at end of file +} diff --git a/local-chains/v31.0/l1-state.json.gz b/local-chains/v31.0/l1-state.json.gz index d1739d782..3d9fb5a11 100644 Binary files a/local-chains/v31.0/l1-state.json.gz and b/local-chains/v31.0/l1-state.json.gz differ diff --git a/local-chains/v31.0/multi_chain/chain_506.yaml b/local-chains/v31.0/multi_chain/chain_506.yaml new file mode 100644 index 000000000..50e8b664e --- /dev/null +++ b/local-chains/v31.0/multi_chain/chain_506.yaml @@ -0,0 +1,19 @@ +general: + ephemeral: true + ephemeral_state: ./local-chains/v31.0/gateway-state.tar.gz +genesis: + bridgehub_address: '0x4555e7147f652fd5d8ecae6abd825b9ec5107e0a' + bytecode_supplier_address: '0xadfa35e51bc33233268e39ca495432cf0c7ecb52' + genesis_input_path: ./local-chains/v31.0/genesis.json + chain_id: 506 +l1_sender: + operator_commit_sk: '0x3ba203f4d1aa1f52b6fc890083b9ca42005fa10d52c45ab43049cb0c7a1137fd' + operator_prove_sk: '0x3b238563d120e58ad6747d5d573d19abe80ac5aa22414ec737463f61187443d8' + operator_execute_sk: '0x796621a4396f414d665ab3e20ad7f3402b43d0648f23c543398cef923a2933e4' +rpc: + address: 0.0.0.0:3052 +external_price_api_client: + source: Forced + forced_prices: + '0x0000000000000000000000000000000000000001': 3000 + diff --git a/local-chains/v31.0/multi_chain/chain_6565.yaml b/local-chains/v31.0/multi_chain/chain_6565.yaml index 9f07cdd99..b3aec2325 100644 --- a/local-chains/v31.0/multi_chain/chain_6565.yaml +++ b/local-chains/v31.0/multi_chain/chain_6565.yaml @@ -1,14 +1,16 @@ general: ephemeral: true + gateway_rpc_url: http://localhost:3052 genesis: - bridgehub_address: '0x69c3388f45f7f944300141ff5735d59f15e4c9f0' - bytecode_supplier_address: '0xa96c213b3a2db7d69eb4fd786b8e8d410860c06d' + bridgehub_address: '0x4555e7147f652fd5d8ecae6abd825b9ec5107e0a' + bytecode_supplier_address: '0xadfa35e51bc33233268e39ca495432cf0c7ecb52' genesis_input_path: ./local-chains/v31.0/genesis.json chain_id: 6565 l1_sender: - operator_commit_sk: '0x62364ecc1a0007cc3ba165e57000a5d890f2d69d9e9b4a1e9e86af646c1f9b25' - operator_prove_sk: '0xcfa9ab3c4cf0c6e4d207cf84cb95bbf87885174182f91b9c947b2c7a6b89439d' - operator_execute_sk: '0xf292a0f460be19ab73c57c33d4a979ddf6cf4385c86d12158b393ece98ad4d30' + pubdata_mode: RelayedL2Calldata + operator_commit_sk: '0xe6ea0a41bb989b0520d51d3d342ae238d805e99c3190fc9b8acf0bc38a826c2f' + operator_prove_sk: '0x0cfe28a8ef7157c8da8facdcb5cca7c3d80bae3539f1e35489f99559085e8ca0' + operator_execute_sk: '0x7d0adab79777ca45db9ffbf5559af45e3d5d045a5a7df0c7bc111570151e8481' rpc: address: 0.0.0.0:3050 external_price_api_client: diff --git a/local-chains/v31.0/multi_chain/chain_6566.yaml b/local-chains/v31.0/multi_chain/chain_6566.yaml index 0fb8f53c2..bbcaf6398 100644 --- a/local-chains/v31.0/multi_chain/chain_6566.yaml +++ b/local-chains/v31.0/multi_chain/chain_6566.yaml @@ -1,14 +1,16 @@ general: ephemeral: true + gateway_rpc_url: http://localhost:3052 genesis: - bridgehub_address: '0x69c3388f45f7f944300141ff5735d59f15e4c9f0' - bytecode_supplier_address: '0xa96c213b3a2db7d69eb4fd786b8e8d410860c06d' + bridgehub_address: '0x4555e7147f652fd5d8ecae6abd825b9ec5107e0a' + bytecode_supplier_address: '0xadfa35e51bc33233268e39ca495432cf0c7ecb52' genesis_input_path: ./local-chains/v31.0/genesis.json chain_id: 6566 l1_sender: - operator_commit_sk: '0xd03068bc4c65805abe734dd83b59eb2efe5013bf99c934e94241f78a2ded2aaa' - operator_prove_sk: '0x18382cc95097e05b51834ab30572823f0ed257e6d548fc4a8e0240c7617b9b74' - operator_execute_sk: '0x43e30cab9abf28e4fbd73628bac87ee7452b302d28eb16bfa5abefdf2acfcc2b' + pubdata_mode: RelayedL2Calldata + operator_commit_sk: '0xee4e86e1adc987c66c6ebcca6e7e54d05b31f539d87217a7e2c231a31d786d23' + operator_prove_sk: '0xbb696e11b564d2748ec3161065f45dee47f5cd76a063e9b804cc1788fb6cb37d' + operator_execute_sk: '0xf4b55e4e10a71273570e9f952c76095d23819fca57d2f2cbcf618e76e4276213' rpc: address: 0.0.0.0:3051 external_price_api_client: diff --git a/local-chains/v31.0/multi_chain/contracts_506.yaml b/local-chains/v31.0/multi_chain/contracts_506.yaml new file mode 100644 index 000000000..e4ab5cf27 --- /dev/null +++ b/local-chains/v31.0/multi_chain/contracts_506.yaml @@ -0,0 +1,58 @@ +create2_factory_addr: 0x4e59b44847b379578588920ca78fbf26c0b4956c +create2_factory_salt: '0x0000000000000000000000000000000000000000000000000000000000000000' +ecosystem_contracts: + bridgehub_proxy_addr: 0x4555e7147f652fd5d8ecae6abd825b9ec5107e0a + message_root_proxy_addr: 0x655039df570481e4e6ff03e228247b3a641ac5d4 + transparent_proxy_admin_addr: 0x55f7e0d5dd591ce4bec72e60baf571f7616bb8fd + stm_deployment_tracker_proxy_addr: 0xb62cf164aeab16ff50c5684ebb2c69aa1281051a + native_token_vault_addr: 0x99e969b2b3c91370012f3795c088b3f7f162801f + chain_asset_handler_proxy_addr: 0xaddfadc84afc61310b22846771f6cd31c0e4d577 + governance: 0x03c82a0f005958d02d322479c1e020064d23052a + chain_admin: 0xe32555188f37cd097092c4aa1c48422917e51895 + proxy_admin: 0x55f7e0d5dd591ce4bec72e60baf571f7616bb8fd + state_transition_proxy_addr: 0x8d39a4c55968638622d9c62a77ae601a5153163b + validator_timelock_addr: 0x84196d08d7469351a1dfadcc9beffc0fc2384b12 + diamond_cut_data: 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000b0d946572bdc3b92fdfbfc30bf2fb3081e2cbd670000000000000000000000000000000000000000000000000000000000001160000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000d800000000000000000000000000000000000000000000000000000000000000e8000000000000000000000000000000000000000000000000000000000000010000000000000000000000000007ea256c6498d6e6aab1f929c26ba73923d0cc90500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000170e18b681000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f000000000000000000000000000000000000000000000000000000001b48b94a000000000000000000000000000000000000000000000000000000001cc5d1030000000000000000000000000000000000000000000000000000000021f603d700000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000023b31192000000000000000000000000000000000000000000000000000000002765d0790000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000002878fe74000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000005b8987480000000000000000000000000000000000000000000000000000000060eae0e70000000000000000000000000000000000000000000000000000000064bf8d66000000000000000000000000000000000000000000000000000000006e762e9800000000000000000000000000000000000000000000000000000000a9f6d94100000000000000000000000000000000000000000000000000000000b4fcb57700000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000c5f1f1f500000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000f9afb97e00000000000000000000000000000000000000000000000000000000000000000000000000000000297f2618bd16f7f94e71b9395162f962d8a54d3a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000003006d49e5b000000000000000000000000000000000000000000000000000000000ec6b0b700000000000000000000000000000000000000000000000000000000fe26699e0000000000000000000000000000000000000000000000000000000018e3a941000000000000000000000000000000000000000000000000000000001de72e340000000000000000000000000000000000000000000000000000000022c5cf230000000000000000000000000000000000000000000000000000000029b98c670000000000000000000000000000000000000000000000000000000033ce93fe000000000000000000000000000000000000000000000000000000003408e470000000000000000000000000000000000000000000000000000000003591c1a000000000000000000000000000000000000000000000000000000000396073820000000000000000000000000000000000000000000000000000000039d7d4aa0000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000052ef6b2c000000000000000000000000000000000000000000000000000000005a59033500000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000006a27e8b5000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000074f4d30d0000000000000000000000000000000000000000000000000000000079823c9a000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000007b30c8da000000000000000000000000000000000000000000000000000000008708474e00000000000000000000000000000000000000000000000000000000946ebad100000000000000000000000000000000000000000000000000000000960dcf240000000000000000000000000000000000000000000000000000000098acd7a6000000000000000000000000000000000000000000000000000000009cd939e4000000000000000000000000000000000000000000000000000000009d1b5a8100000000000000000000000000000000000000000000000000000000a1954fc500000000000000000000000000000000000000000000000000000000adfca15e00000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000b22dd78e00000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000cdffacc600000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000dd655bb000000000000000000000000000000000000000000000000000000000e5355c7500000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000f4ff5e2e00000000000000000000000000000000000000000000000000000000f5c1182c00000000000000000000000000000000000000000000000000000000facd743b00000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000000000000000000000000000f9fdffd47c894099b0ed8773210c40c1397cc4fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010042901c70000000000000000000000000000000000000000000000000000000007f106600000000000000000000000000000000000000000000000000000000012f43dab00000000000000000000000000000000000000000000000000000000e896760d0000000000000000000000000000000000000000000000000000000018b7fc2200000000000000000000000000000000000000000000000000000000263b7f8e00000000000000000000000000000000000000000000000000000000353d71280000000000000000000000000000000000000000000000000000000060da3e8300000000000000000000000000000000000000000000000000000000685143b90000000000000000000000000000000000000000000000000000000079cf6165000000000000000000000000000000000000000000000000000000007efda2ae00000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000d07b90d100000000000000000000000000000000000000000000000000000000da24b3ee00000000000000000000000000000000000000000000000000000000ddcc9eec00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000000000000000000000000000086ea1be44a048a83246f90a5a34c589444f21730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003a085344d000000000000000000000000000000000000000000000000000000007ca4eff7000000000000000000000000000000000000000000000000000000009271e45000000000000000000000000000000000000000000000000000000000000000000000000000000000e2d9c8af0d357f8e10acbc5ce8bfbdee7ac368f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000775ceffdf000000000000000000000000000000000000000000000000000000003b064e40000000000000000000000000000000000000000000000000000000003f42d5dd0000000000000000000000000000000000000000000000000000000041cf49bb0000000000000000000000000000000000000000000000000000000042249f9f0000000000000000000000000000000000000000000000000000000063d8882a0000000000000000000000000000000000000000000000000000000064b554ad000000000000000000000000000000000000000000000000000000000000000000000000000000002715a21107ca2af5edc160cf3806f6e8e177c75300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020b6db820000000000000000000000000000000000000000000000000000000000db9eb87000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + force_deployments_data: 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e000000000000000000000000aeadf1a4baa1347ac7a83843f67adcc3303aad3d010000f1ca07b83b60531246b392374e0e38ff8f88dd00fede945029e6a1a3d400000000000000000000000014d92a0f005958d02d322479c1e020064d23163b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000006c0000000000000000000000000000000000000000000000000000000000000082000000000000000000000000000000000000000000000000000000000000009800000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009625d21d396a0138434c4a5fbc726cdc808d5a08000000000000000000000000000000000000000000000000000000000000000050c8daa176d24869d010ad74c2d374427601375ca2264e94f73784e299d572d40000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000602808044aa6f6a9dc732d496af044debbe98b8fc96e41daddde4bcd4b57cbd8a400000000000000000000000000000000000000000000000000000000000032a17800e9e408b055384e855a1afda32c3574d0fa224f76337a3de19f59fb59739c000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006026e03b5ebc791e9782dc6bc4e04a1a2b87f972c3e22366361041e82d058dc2ff000000000000000000000000000000000000000000000000000000000000439a2fe424fafaaa2d3dc607c6b950c7119c8aff11f64c8563fbd4d20915b49e6d91000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000060aa9e942ba0c8a15462987111090ed80bdbdede38709574b609a07f02d75f69b2000000000000000000000000000000000000000000000000000000000000559525f3f493b536ccb07ba658567f1bfac76963d90a1660bd4c14aca821b06c0472000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000605a7d947e11a5e714fbaff10c4054c255f47c65227ef105c11e1f2ceb293b27990000000000000000000000000000000000000000000000000000000000002ec19078a63aab8caef8bdedb5f0b35744fe6c7be478d72c4ec8e133018e0d281dd5000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006054676cbb501f654b5322f477873c1354ef0c50a28352ea261dc09bf1ba1cc2f70000000000000000000000000000000000000000000000000000000000002a80f40a8872c814ed3dfdd103d72768cb2ff575fe69fe63cde4c31df87783b6955e000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000605376700161b668dffc5128790cb65beefa48427c8cc73df1ee71a1ca7a6a50c0000000000000000000000000000000000000000000000000000000000000546b9114db7ea1a8f7a639be8aed01f62404e7cb5f5429f27ea3008c2b3eb9ee153f000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006003e28832df3083fdeb54f1be6187f804807e1295718514d97aaa9983865f27e3000000000000000000000000000000000000000000000000000000000000336ec0846416c307bac37aa9e3ebd2f59dfd009adead92896929541eea67a183a7ce000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000609c7349455110b1150f0b5cabc8f7ce49a1bb39a296704d1bbba22c89cd5bf173000000000000000000000000000000000000000000000000000000000000153b7f32d622a146df551f43ffe9a5a720c2e5e8c4a07b1d605977350b6969964bab000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000602f867a675945a4bb14cca98ae79c2a794bbadf6797c5fa2a9557d8d7bab525650000000000000000000000000000000000000000000000000000000000003a81cd88f8ef2a5930151a53b734017e4872de6349bf54e95950a5f407ceddd52b29000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a02963 + l1_bytecodes_supplier_addr: 0xadfa35e51bc33233268e39ca495432cf0c7ecb52 + l1_wrapped_base_token_store: null + server_notifier_proxy_addr: 0x50bec3afa0884fbe6fe3831919a348c321dd029c + default_upgrade_addr: 0x7706c2d7c5ed4be12f40588b5308668f28b0d46f + genesis_upgrade_addr: 0xd25341d6cb6327d12274ded0f5c6c0f22efca5fe + verifier_addr: 0x6d82e1dbebb8cb950cde6cd90744d01ed6985980 + rollup_l1_da_validator_addr: 0x5be9468566a91e9979cc432a07998424b2f8c264 + no_da_validium_l1_validator_addr: 0xd58fcbfe780248fe8d7bcb20e1d423cd4153e32f + avail_l1_da_validator_addr: 0x7ad5989a2689d5fbf7e5efa66d1367da262dda9c + l1_rollup_da_manager: 0xcc9cbc2c68cde73cd7cad80802f819309b1b8613 + blobs_zksync_os_l1_da_validator_addr: 0xbbbc7b190b4b01b1ec4f4df1a555a2709ef78bfd +bridges: + erc20: + l1_address: 0x9180770d314d5e6ae240a97edb7e0e08cdea12d0 + l2_address: '0x0000000000000000000000000000000000010003' + shared: + l1_address: 0xaeadf1a4baa1347ac7a83843f67adcc3303aad3d + l2_address: '0x0000000000000000000000000000000000010003' + l1_nullifier_addr: 0x31c0e36cff47a36168e2c77aec82a60fa48327db +l1: + default_upgrade_addr: 0x7706c2d7c5ed4be12f40588b5308668f28b0d46f + diamond_proxy_addr: 0x20da38fd914953a8222c0f40cb1168a2f79136e7 + governance_addr: 0x3d14ea332c0b3a364f383e8abe8ff3306cd5e8c3 + chain_admin_addr: 0x4632d347ad38b78b7da37b3f672623bd55151fd1 + access_control_restriction_addr: '0x0000000000000000000000000000000000000000' + chain_proxy_admin_addr: 0x467450118d87b9284a08f953ae6dcac01042a972 + multicall3_addr: 0x962bd50403f6c3fe555f4585114296753c84c651 + verifier_addr: 0x6d82e1dbebb8cb950cde6cd90744d01ed6985980 + validator_timelock_addr: 0x84196d08d7469351a1dfadcc9beffc0fc2384b12 + base_token_addr: '0x0000000000000000000000000000000000000001' + base_token_asset_id: 0x52f431aa35dd80982e3c66614112503ca2c6e344745f4a2bcfc9bd7e09c75584 + rollup_l1_da_validator_addr: 0x5be9468566a91e9979cc432a07998424b2f8c264 + blobs_zksync_os_l1_da_validator_addr: 0xbbbc7b190b4b01b1ec4f4df1a555a2709ef78bfd + avail_l1_da_validator_addr: 0x7ad5989a2689d5fbf7e5efa66d1367da262dda9c + no_da_validium_l1_validator_addr: 0xd58fcbfe780248fe8d7bcb20e1d423cd4153e32f +l2: + testnet_paymaster_addr: '0x0000000000000000000000000000000000000000' + default_l2_upgrader: 0xf1324cb3804d3d0d5e0a6de4b439d8edfac7989c + l2_native_token_vault_proxy_addr: '0x0000000000000000000000000000000000010004' + consensus_registry: 0x830feb76dc308bacb157999c12cf3ed27749cda0 + multicall3: 0x60b41785cf8af486d4a4720d694206e37daa0410 + timestamp_asserter_addr: 0xeabf700e6bd00ff91058d1232541f972ea80524d diff --git a/local-chains/v31.0/multi_chain/contracts_6565.yaml b/local-chains/v31.0/multi_chain/contracts_6565.yaml index ac97044d0..b3a4f9df1 100644 --- a/local-chains/v31.0/multi_chain/contracts_6565.yaml +++ b/local-chains/v31.0/multi_chain/contracts_6565.yaml @@ -1,48 +1,48 @@ create2_factory_addr: 0x4e59b44847b379578588920ca78fbf26c0b4956c create2_factory_salt: '0x0000000000000000000000000000000000000000000000000000000000000000' ecosystem_contracts: - bridgehub_proxy_addr: 0x69c3388f45f7f944300141ff5735d59f15e4c9f0 - message_root_proxy_addr: 0x647499a695ffb369d1719ea4ed3be86608e4dd10 - transparent_proxy_admin_addr: 0x9a1422cba018ba9029dc8795e03f3bac1455d141 - stm_deployment_tracker_proxy_addr: 0x5c2ee024f415b78f80e9fe0943d5a7912ba9359f - native_token_vault_addr: 0xf9e82de5358d8fca034665b337fc84820433ffd4 - chain_asset_handler_proxy_addr: 0x159969057faa00805e4ebc59e3ef4a7dded37d00 - governance: 0x24e3fbc2c4f22af559c0fac9ab339e5686cd52c4 - chain_admin: 0x4d97d9e028d628579823b0b71bc545502d65c191 - proxy_admin: 0x9a1422cba018ba9029dc8795e03f3bac1455d141 - state_transition_proxy_addr: 0x50a0505ce8e746711c9fe9ce7ab4b6d0cfff9104 - validator_timelock_addr: 0x89466662ab79c875b1e637eb0fd169d11937eac8 - diamond_cut_data: 0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000005f8d353b662c198172ea9d4b7b23ff50e75e6ed00000000000000000000000000000000000000000000000000000000000001160000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000d800000000000000000000000000000000000000000000000000000000000000e800000000000000000000000000000000000000000000000000000000000001000000000000000000000000000484eef1cbd10d1d0a5984a2254a174bc9ef34ef100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000170e18b681000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f000000000000000000000000000000000000000000000000000000001b48b94a000000000000000000000000000000000000000000000000000000001cc5d1030000000000000000000000000000000000000000000000000000000021f603d700000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000023b31192000000000000000000000000000000000000000000000000000000002765d0790000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000002878fe74000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000005b8987480000000000000000000000000000000000000000000000000000000060eae0e70000000000000000000000000000000000000000000000000000000064bf8d66000000000000000000000000000000000000000000000000000000006e762e9800000000000000000000000000000000000000000000000000000000a9f6d94100000000000000000000000000000000000000000000000000000000b4fcb57700000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000c5f1f1f500000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000f9afb97e00000000000000000000000000000000000000000000000000000000000000000000000000000000c571649a5b2cf78d7f09ff6eeabc45406557217d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000003006d49e5b000000000000000000000000000000000000000000000000000000000ec6b0b700000000000000000000000000000000000000000000000000000000fe26699e0000000000000000000000000000000000000000000000000000000018e3a941000000000000000000000000000000000000000000000000000000001de72e340000000000000000000000000000000000000000000000000000000022c5cf230000000000000000000000000000000000000000000000000000000029b98c670000000000000000000000000000000000000000000000000000000033ce93fe000000000000000000000000000000000000000000000000000000003408e470000000000000000000000000000000000000000000000000000000003591c1a000000000000000000000000000000000000000000000000000000000396073820000000000000000000000000000000000000000000000000000000039d7d4aa0000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000052ef6b2c000000000000000000000000000000000000000000000000000000005a59033500000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000006a27e8b5000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000074f4d30d0000000000000000000000000000000000000000000000000000000079823c9a000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000007b30c8da000000000000000000000000000000000000000000000000000000008708474e00000000000000000000000000000000000000000000000000000000946ebad100000000000000000000000000000000000000000000000000000000960dcf240000000000000000000000000000000000000000000000000000000098acd7a6000000000000000000000000000000000000000000000000000000009cd939e4000000000000000000000000000000000000000000000000000000009d1b5a8100000000000000000000000000000000000000000000000000000000a1954fc500000000000000000000000000000000000000000000000000000000adfca15e00000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000b22dd78e00000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000cdffacc600000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000dd655bb000000000000000000000000000000000000000000000000000000000e5355c7500000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000f4ff5e2e00000000000000000000000000000000000000000000000000000000f5c1182c00000000000000000000000000000000000000000000000000000000facd743b00000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000000000000000000000000000f922d4ad9c4fff52daa4557efaf2ed755ecea6340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010042901c70000000000000000000000000000000000000000000000000000000007f106600000000000000000000000000000000000000000000000000000000012f43dab00000000000000000000000000000000000000000000000000000000e896760d0000000000000000000000000000000000000000000000000000000018b7fc2200000000000000000000000000000000000000000000000000000000263b7f8e00000000000000000000000000000000000000000000000000000000353d71280000000000000000000000000000000000000000000000000000000060da3e8300000000000000000000000000000000000000000000000000000000685143b90000000000000000000000000000000000000000000000000000000079cf6165000000000000000000000000000000000000000000000000000000007efda2ae00000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000d07b90d100000000000000000000000000000000000000000000000000000000da24b3ee00000000000000000000000000000000000000000000000000000000ddcc9eec00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000000000000000000000000000f18d28fb36bf485c5206f7cb0c41c8a9433a70e50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003a085344d000000000000000000000000000000000000000000000000000000007ca4eff7000000000000000000000000000000000000000000000000000000009271e450000000000000000000000000000000000000000000000000000000000000000000000000000000005f54b2e9f98e33e2d79ae186f0ea13e0f30d9bce000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000775ceffdf000000000000000000000000000000000000000000000000000000003b064e40000000000000000000000000000000000000000000000000000000003f42d5dd0000000000000000000000000000000000000000000000000000000041cf49bb0000000000000000000000000000000000000000000000000000000042249f9f0000000000000000000000000000000000000000000000000000000063d8882a0000000000000000000000000000000000000000000000000000000064b554ad00000000000000000000000000000000000000000000000000000000000000000000000000000000f7c959fd3020a23459b679c869f4399ceae3039f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020b6db820000000000000000000000000000000000000000000000000000000000db9eb87000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - force_deployments_data: 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e000000000000000000000000e7e43b470aadc58c3dfd6563658c7967c3fcceb5010000f1ca07b83b60531246b392374e0e38ff8f88dd00fede945029e6a1a3d400000000000000000000000035f4fbc2c4f22af559c0fac9ab339e5686cd63d5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000006c0000000000000000000000000000000000000000000000000000000000000082000000000000000000000000000000000000000000000000000000000000009800000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d9ea370c74cd20ec4a140996a7aa787565fd82f000000000000000000000000000000000000000000000000000000000000000050c8daa176d24869d010ad74c2d374427601375ca2264e94f73784e299d572d40000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000601f8bee51b2719026f55d96977f658cc64cb6ee1421e241c30d190bfed10be69000000000000000000000000000000000000000000000000000000000000032a1f7eb591ac72141efc6f096ebcb49909c293f434a35c598ab7c7018a56485484b000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000060f8c7bcff81252df15000a0f40d9a9ad15dcd6c817041df978244294e4ba3aeb4000000000000000000000000000000000000000000000000000000000000439a87459a0b17e5d0a5fbc9207fc8ae3a05f4c01d81697d0ccca67fb2e31d2ce46f000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006000bf3e450a83105c1d44c758bdc929307b189b0fd3c0acd02e516194e93dc7c200000000000000000000000000000000000000000000000000000000000055950b12b3669cf704f9ddc3c23950c6ca31b72392fa888f3064bbfe08384d70fb96000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000060a02f2de146152643c6d9bde819ea680dbe4436181b0b5459f8819ced94e88ea70000000000000000000000000000000000000000000000000000000000002ec15c465f1168cfc4d23802ead84d2cf8e6a927209c98b43ac2da97e287e1f86ec4000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000604864259fd6849ae10dad33227f73a667e8a541940dbd27c9d989aa2aff4d78450000000000000000000000000000000000000000000000000000000000002a803c143a5a00aff01bcf3c32588ddd53ba480d712c1f7ef52b1be075378dfffb23000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000060eb3ba7851d2d7663c6213df1dc0ea3d07a6d70969299d7095955571700517ca30000000000000000000000000000000000000000000000000000000000005497c36cdd8c00644d1a5979979ea86d062624c86c08b44fdb4b8b5e54fa001fd6ef000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006041916b0c1703a520d5267a408b54319e22de54dda12af0f1f94a6cf2b1dabdc000000000000000000000000000000000000000000000000000000000000030dbd89a287530f11c46e4b53cb37c0279380d80da23352fd13242c4a78c23d6107c000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000060163218d9c337131cce0cd864744382b94bb0407cd23c5d302ec6cd52d8d02ed4000000000000000000000000000000000000000000000000000000000000153bf4c79156e7e3f758ec90010bf93066a3d319bfc427d4b41cb426c437a778dc24000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000604fef2b01ea81ecacdbf19aba28c89a389306eede7addff69c7a2d73ef0c7f0060000000000000000000000000000000000000000000000000000000000003a81b21342eced670b8ee778635326026203e079719e2163df72aabf8dddd04d9ae8000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a02963 - l1_bytecodes_supplier_addr: 0xa96c213b3a2db7d69eb4fd786b8e8d410860c06d + bridgehub_proxy_addr: 0x4555e7147f652fd5d8ecae6abd825b9ec5107e0a + message_root_proxy_addr: 0x655039df570481e4e6ff03e228247b3a641ac5d4 + transparent_proxy_admin_addr: 0x55f7e0d5dd591ce4bec72e60baf571f7616bb8fd + stm_deployment_tracker_proxy_addr: 0xb62cf164aeab16ff50c5684ebb2c69aa1281051a + native_token_vault_addr: 0x99e969b2b3c91370012f3795c088b3f7f162801f + chain_asset_handler_proxy_addr: 0xaddfadc84afc61310b22846771f6cd31c0e4d577 + governance: 0x03c82a0f005958d02d322479c1e020064d23052a + chain_admin: 0xe32555188f37cd097092c4aa1c48422917e51895 + proxy_admin: 0x55f7e0d5dd591ce4bec72e60baf571f7616bb8fd + state_transition_proxy_addr: 0x8d39a4c55968638622d9c62a77ae601a5153163b + validator_timelock_addr: 0x84196d08d7469351a1dfadcc9beffc0fc2384b12 + diamond_cut_data: 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000b0d946572bdc3b92fdfbfc30bf2fb3081e2cbd670000000000000000000000000000000000000000000000000000000000001160000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000d800000000000000000000000000000000000000000000000000000000000000e8000000000000000000000000000000000000000000000000000000000000010000000000000000000000000007ea256c6498d6e6aab1f929c26ba73923d0cc90500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000170e18b681000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f000000000000000000000000000000000000000000000000000000001b48b94a000000000000000000000000000000000000000000000000000000001cc5d1030000000000000000000000000000000000000000000000000000000021f603d700000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000023b31192000000000000000000000000000000000000000000000000000000002765d0790000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000002878fe74000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000005b8987480000000000000000000000000000000000000000000000000000000060eae0e70000000000000000000000000000000000000000000000000000000064bf8d66000000000000000000000000000000000000000000000000000000006e762e9800000000000000000000000000000000000000000000000000000000a9f6d94100000000000000000000000000000000000000000000000000000000b4fcb57700000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000c5f1f1f500000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000f9afb97e00000000000000000000000000000000000000000000000000000000000000000000000000000000297f2618bd16f7f94e71b9395162f962d8a54d3a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000003006d49e5b000000000000000000000000000000000000000000000000000000000ec6b0b700000000000000000000000000000000000000000000000000000000fe26699e0000000000000000000000000000000000000000000000000000000018e3a941000000000000000000000000000000000000000000000000000000001de72e340000000000000000000000000000000000000000000000000000000022c5cf230000000000000000000000000000000000000000000000000000000029b98c670000000000000000000000000000000000000000000000000000000033ce93fe000000000000000000000000000000000000000000000000000000003408e470000000000000000000000000000000000000000000000000000000003591c1a000000000000000000000000000000000000000000000000000000000396073820000000000000000000000000000000000000000000000000000000039d7d4aa0000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000052ef6b2c000000000000000000000000000000000000000000000000000000005a59033500000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000006a27e8b5000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000074f4d30d0000000000000000000000000000000000000000000000000000000079823c9a000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000007b30c8da000000000000000000000000000000000000000000000000000000008708474e00000000000000000000000000000000000000000000000000000000946ebad100000000000000000000000000000000000000000000000000000000960dcf240000000000000000000000000000000000000000000000000000000098acd7a6000000000000000000000000000000000000000000000000000000009cd939e4000000000000000000000000000000000000000000000000000000009d1b5a8100000000000000000000000000000000000000000000000000000000a1954fc500000000000000000000000000000000000000000000000000000000adfca15e00000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000b22dd78e00000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000cdffacc600000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000dd655bb000000000000000000000000000000000000000000000000000000000e5355c7500000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000f4ff5e2e00000000000000000000000000000000000000000000000000000000f5c1182c00000000000000000000000000000000000000000000000000000000facd743b00000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000000000000000000000000000f9fdffd47c894099b0ed8773210c40c1397cc4fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010042901c70000000000000000000000000000000000000000000000000000000007f106600000000000000000000000000000000000000000000000000000000012f43dab00000000000000000000000000000000000000000000000000000000e896760d0000000000000000000000000000000000000000000000000000000018b7fc2200000000000000000000000000000000000000000000000000000000263b7f8e00000000000000000000000000000000000000000000000000000000353d71280000000000000000000000000000000000000000000000000000000060da3e8300000000000000000000000000000000000000000000000000000000685143b90000000000000000000000000000000000000000000000000000000079cf6165000000000000000000000000000000000000000000000000000000007efda2ae00000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000d07b90d100000000000000000000000000000000000000000000000000000000da24b3ee00000000000000000000000000000000000000000000000000000000ddcc9eec00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000000000000000000000000000086ea1be44a048a83246f90a5a34c589444f21730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003a085344d000000000000000000000000000000000000000000000000000000007ca4eff7000000000000000000000000000000000000000000000000000000009271e45000000000000000000000000000000000000000000000000000000000000000000000000000000000e2d9c8af0d357f8e10acbc5ce8bfbdee7ac368f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000775ceffdf000000000000000000000000000000000000000000000000000000003b064e40000000000000000000000000000000000000000000000000000000003f42d5dd0000000000000000000000000000000000000000000000000000000041cf49bb0000000000000000000000000000000000000000000000000000000042249f9f0000000000000000000000000000000000000000000000000000000063d8882a0000000000000000000000000000000000000000000000000000000064b554ad000000000000000000000000000000000000000000000000000000000000000000000000000000002715a21107ca2af5edc160cf3806f6e8e177c75300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020b6db820000000000000000000000000000000000000000000000000000000000db9eb87000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + force_deployments_data: 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e000000000000000000000000aeadf1a4baa1347ac7a83843f67adcc3303aad3d010000f1ca07b83b60531246b392374e0e38ff8f88dd00fede945029e6a1a3d400000000000000000000000014d92a0f005958d02d322479c1e020064d23163b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000006c0000000000000000000000000000000000000000000000000000000000000082000000000000000000000000000000000000000000000000000000000000009800000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009625d21d396a0138434c4a5fbc726cdc808d5a08000000000000000000000000000000000000000000000000000000000000000050c8daa176d24869d010ad74c2d374427601375ca2264e94f73784e299d572d40000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000602808044aa6f6a9dc732d496af044debbe98b8fc96e41daddde4bcd4b57cbd8a400000000000000000000000000000000000000000000000000000000000032a17800e9e408b055384e855a1afda32c3574d0fa224f76337a3de19f59fb59739c000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006026e03b5ebc791e9782dc6bc4e04a1a2b87f972c3e22366361041e82d058dc2ff000000000000000000000000000000000000000000000000000000000000439a2fe424fafaaa2d3dc607c6b950c7119c8aff11f64c8563fbd4d20915b49e6d91000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000060aa9e942ba0c8a15462987111090ed80bdbdede38709574b609a07f02d75f69b2000000000000000000000000000000000000000000000000000000000000559525f3f493b536ccb07ba658567f1bfac76963d90a1660bd4c14aca821b06c0472000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000605a7d947e11a5e714fbaff10c4054c255f47c65227ef105c11e1f2ceb293b27990000000000000000000000000000000000000000000000000000000000002ec19078a63aab8caef8bdedb5f0b35744fe6c7be478d72c4ec8e133018e0d281dd5000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006054676cbb501f654b5322f477873c1354ef0c50a28352ea261dc09bf1ba1cc2f70000000000000000000000000000000000000000000000000000000000002a80f40a8872c814ed3dfdd103d72768cb2ff575fe69fe63cde4c31df87783b6955e000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000605376700161b668dffc5128790cb65beefa48427c8cc73df1ee71a1ca7a6a50c0000000000000000000000000000000000000000000000000000000000000546b9114db7ea1a8f7a639be8aed01f62404e7cb5f5429f27ea3008c2b3eb9ee153f000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006003e28832df3083fdeb54f1be6187f804807e1295718514d97aaa9983865f27e3000000000000000000000000000000000000000000000000000000000000336ec0846416c307bac37aa9e3ebd2f59dfd009adead92896929541eea67a183a7ce000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000609c7349455110b1150f0b5cabc8f7ce49a1bb39a296704d1bbba22c89cd5bf173000000000000000000000000000000000000000000000000000000000000153b7f32d622a146df551f43ffe9a5a720c2e5e8c4a07b1d605977350b6969964bab000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000602f867a675945a4bb14cca98ae79c2a794bbadf6797c5fa2a9557d8d7bab525650000000000000000000000000000000000000000000000000000000000003a81cd88f8ef2a5930151a53b734017e4872de6349bf54e95950a5f407ceddd52b29000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a02963 + l1_bytecodes_supplier_addr: 0xadfa35e51bc33233268e39ca495432cf0c7ecb52 l1_wrapped_base_token_store: null - server_notifier_proxy_addr: 0x12135c2dbac1541777d5b0278e4c02dd844813ad - default_upgrade_addr: 0xa3302a028fc10b3aeeee9b7c461068208262fd7d - genesis_upgrade_addr: 0xe5f9eec1bf02ea6fb28020a8b6aec91d86e2fc5d - verifier_addr: 0xc3d80a792b78c49259291d5691564265b3fdb42a + server_notifier_proxy_addr: 0x50bec3afa0884fbe6fe3831919a348c321dd029c + default_upgrade_addr: 0x7706c2d7c5ed4be12f40588b5308668f28b0d46f + genesis_upgrade_addr: 0xd25341d6cb6327d12274ded0f5c6c0f22efca5fe + verifier_addr: 0x6d82e1dbebb8cb950cde6cd90744d01ed6985980 rollup_l1_da_validator_addr: 0x5be9468566a91e9979cc432a07998424b2f8c264 no_da_validium_l1_validator_addr: 0xd58fcbfe780248fe8d7bcb20e1d423cd4153e32f avail_l1_da_validator_addr: 0x7ad5989a2689d5fbf7e5efa66d1367da262dda9c - l1_rollup_da_manager: 0x65c06657b089cd1878035d7bc85c2f8949805125 + l1_rollup_da_manager: 0xcc9cbc2c68cde73cd7cad80802f819309b1b8613 blobs_zksync_os_l1_da_validator_addr: 0xbbbc7b190b4b01b1ec4f4df1a555a2709ef78bfd bridges: erc20: - l1_address: 0x504708f7656603a7375ce8e07e7edf743b8ab392 + l1_address: 0x9180770d314d5e6ae240a97edb7e0e08cdea12d0 l2_address: '0x0000000000000000000000000000000000010003' shared: - l1_address: 0xe7e43b470aadc58c3dfd6563658c7967c3fcceb5 + l1_address: 0xaeadf1a4baa1347ac7a83843f67adcc3303aad3d l2_address: '0x0000000000000000000000000000000000010003' - l1_nullifier_addr: 0x93d3649078601b635229eb2133bbbbae73f3541e + l1_nullifier_addr: 0x31c0e36cff47a36168e2c77aec82a60fa48327db l1: - default_upgrade_addr: 0xa3302a028fc10b3aeeee9b7c461068208262fd7d - diamond_proxy_addr: 0x1882a9ae62597d8f37e4f091135a8450e553c49a - governance_addr: 0x9c7e4111690659403a67a20b0e18b6f0efd5689c - chain_admin_addr: 0x61b20acb09dfab7c5dbcd0e289f2e5b491362f92 + default_upgrade_addr: 0x7706c2d7c5ed4be12f40588b5308668f28b0d46f + diamond_proxy_addr: 0xdb28aad46e378a9f0df721643a1d526f7ac3eae8 + governance_addr: 0x1b281896fa45d8274723e362b39d9602d868ae67 + chain_admin_addr: 0x0c1bbd75bc637bbadc597424990bb35c068e3a01 access_control_restriction_addr: '0x0000000000000000000000000000000000000000' - chain_proxy_admin_addr: 0xcfbd82f22372999304566e44ee0e31cd9a53154d + chain_proxy_admin_addr: 0x1ec4784eda4a5c073041dd665593845760e03582 multicall3_addr: 0x962bd50403f6c3fe555f4585114296753c84c651 - verifier_addr: 0xc3d80a792b78c49259291d5691564265b3fdb42a - validator_timelock_addr: 0x89466662ab79c875b1e637eb0fd169d11937eac8 + verifier_addr: 0x6d82e1dbebb8cb950cde6cd90744d01ed6985980 + validator_timelock_addr: 0x84196d08d7469351a1dfadcc9beffc0fc2384b12 base_token_addr: '0x0000000000000000000000000000000000000001' base_token_asset_id: 0x52f431aa35dd80982e3c66614112503ca2c6e344745f4a2bcfc9bd7e09c75584 rollup_l1_da_validator_addr: 0x5be9468566a91e9979cc432a07998424b2f8c264 @@ -51,8 +51,7 @@ l1: no_da_validium_l1_validator_addr: 0xd58fcbfe780248fe8d7bcb20e1d423cd4153e32f l2: testnet_paymaster_addr: '0x0000000000000000000000000000000000000000' - default_l2_upgrader: 0x9cea59f11ebd0c893128f3cf7cd5b67bb2511440 - l2_native_token_vault_proxy_addr: '0x0000000000000000000000000000000000010004' - consensus_registry: 0x0278a3ea2d1676cccd527ba98d7fb63d9bdd9277 - multicall3: 0x84da27f1051d8d9ee83d8133336052eb4cb52cb4 - timestamp_asserter_addr: 0x5ffb70f82ae09ac8770fcc3af2bde4b8955fd7d6 + default_l2_upgrader: '0x0000000000000000000000000000000000000000' + consensus_registry: null + multicall3: null + timestamp_asserter_addr: null diff --git a/local-chains/v31.0/multi_chain/contracts_6566.yaml b/local-chains/v31.0/multi_chain/contracts_6566.yaml index 8cae18de1..ca0853ab5 100644 --- a/local-chains/v31.0/multi_chain/contracts_6566.yaml +++ b/local-chains/v31.0/multi_chain/contracts_6566.yaml @@ -1,48 +1,48 @@ create2_factory_addr: 0x4e59b44847b379578588920ca78fbf26c0b4956c create2_factory_salt: '0x0000000000000000000000000000000000000000000000000000000000000000' ecosystem_contracts: - bridgehub_proxy_addr: 0x69c3388f45f7f944300141ff5735d59f15e4c9f0 - message_root_proxy_addr: 0x647499a695ffb369d1719ea4ed3be86608e4dd10 - transparent_proxy_admin_addr: 0x9a1422cba018ba9029dc8795e03f3bac1455d141 - stm_deployment_tracker_proxy_addr: 0x5c2ee024f415b78f80e9fe0943d5a7912ba9359f - native_token_vault_addr: 0xf9e82de5358d8fca034665b337fc84820433ffd4 - chain_asset_handler_proxy_addr: 0x159969057faa00805e4ebc59e3ef4a7dded37d00 - governance: 0x24e3fbc2c4f22af559c0fac9ab339e5686cd52c4 - chain_admin: 0x4d97d9e028d628579823b0b71bc545502d65c191 - proxy_admin: 0x9a1422cba018ba9029dc8795e03f3bac1455d141 - state_transition_proxy_addr: 0x50a0505ce8e746711c9fe9ce7ab4b6d0cfff9104 - validator_timelock_addr: 0x89466662ab79c875b1e637eb0fd169d11937eac8 - diamond_cut_data: 0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000005f8d353b662c198172ea9d4b7b23ff50e75e6ed00000000000000000000000000000000000000000000000000000000000001160000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000d800000000000000000000000000000000000000000000000000000000000000e800000000000000000000000000000000000000000000000000000000000001000000000000000000000000000484eef1cbd10d1d0a5984a2254a174bc9ef34ef100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000170e18b681000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f000000000000000000000000000000000000000000000000000000001b48b94a000000000000000000000000000000000000000000000000000000001cc5d1030000000000000000000000000000000000000000000000000000000021f603d700000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000023b31192000000000000000000000000000000000000000000000000000000002765d0790000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000002878fe74000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000005b8987480000000000000000000000000000000000000000000000000000000060eae0e70000000000000000000000000000000000000000000000000000000064bf8d66000000000000000000000000000000000000000000000000000000006e762e9800000000000000000000000000000000000000000000000000000000a9f6d94100000000000000000000000000000000000000000000000000000000b4fcb57700000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000c5f1f1f500000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000f9afb97e00000000000000000000000000000000000000000000000000000000000000000000000000000000c571649a5b2cf78d7f09ff6eeabc45406557217d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000003006d49e5b000000000000000000000000000000000000000000000000000000000ec6b0b700000000000000000000000000000000000000000000000000000000fe26699e0000000000000000000000000000000000000000000000000000000018e3a941000000000000000000000000000000000000000000000000000000001de72e340000000000000000000000000000000000000000000000000000000022c5cf230000000000000000000000000000000000000000000000000000000029b98c670000000000000000000000000000000000000000000000000000000033ce93fe000000000000000000000000000000000000000000000000000000003408e470000000000000000000000000000000000000000000000000000000003591c1a000000000000000000000000000000000000000000000000000000000396073820000000000000000000000000000000000000000000000000000000039d7d4aa0000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000052ef6b2c000000000000000000000000000000000000000000000000000000005a59033500000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000006a27e8b5000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000074f4d30d0000000000000000000000000000000000000000000000000000000079823c9a000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000007b30c8da000000000000000000000000000000000000000000000000000000008708474e00000000000000000000000000000000000000000000000000000000946ebad100000000000000000000000000000000000000000000000000000000960dcf240000000000000000000000000000000000000000000000000000000098acd7a6000000000000000000000000000000000000000000000000000000009cd939e4000000000000000000000000000000000000000000000000000000009d1b5a8100000000000000000000000000000000000000000000000000000000a1954fc500000000000000000000000000000000000000000000000000000000adfca15e00000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000b22dd78e00000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000cdffacc600000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000dd655bb000000000000000000000000000000000000000000000000000000000e5355c7500000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000f4ff5e2e00000000000000000000000000000000000000000000000000000000f5c1182c00000000000000000000000000000000000000000000000000000000facd743b00000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000000000000000000000000000f922d4ad9c4fff52daa4557efaf2ed755ecea6340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010042901c70000000000000000000000000000000000000000000000000000000007f106600000000000000000000000000000000000000000000000000000000012f43dab00000000000000000000000000000000000000000000000000000000e896760d0000000000000000000000000000000000000000000000000000000018b7fc2200000000000000000000000000000000000000000000000000000000263b7f8e00000000000000000000000000000000000000000000000000000000353d71280000000000000000000000000000000000000000000000000000000060da3e8300000000000000000000000000000000000000000000000000000000685143b90000000000000000000000000000000000000000000000000000000079cf6165000000000000000000000000000000000000000000000000000000007efda2ae00000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000d07b90d100000000000000000000000000000000000000000000000000000000da24b3ee00000000000000000000000000000000000000000000000000000000ddcc9eec00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000000000000000000000000000f18d28fb36bf485c5206f7cb0c41c8a9433a70e50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003a085344d000000000000000000000000000000000000000000000000000000007ca4eff7000000000000000000000000000000000000000000000000000000009271e450000000000000000000000000000000000000000000000000000000000000000000000000000000005f54b2e9f98e33e2d79ae186f0ea13e0f30d9bce000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000775ceffdf000000000000000000000000000000000000000000000000000000003b064e40000000000000000000000000000000000000000000000000000000003f42d5dd0000000000000000000000000000000000000000000000000000000041cf49bb0000000000000000000000000000000000000000000000000000000042249f9f0000000000000000000000000000000000000000000000000000000063d8882a0000000000000000000000000000000000000000000000000000000064b554ad00000000000000000000000000000000000000000000000000000000000000000000000000000000f7c959fd3020a23459b679c869f4399ceae3039f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020b6db820000000000000000000000000000000000000000000000000000000000db9eb87000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - force_deployments_data: 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e000000000000000000000000e7e43b470aadc58c3dfd6563658c7967c3fcceb5010000f1ca07b83b60531246b392374e0e38ff8f88dd00fede945029e6a1a3d400000000000000000000000035f4fbc2c4f22af559c0fac9ab339e5686cd63d5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000006c0000000000000000000000000000000000000000000000000000000000000082000000000000000000000000000000000000000000000000000000000000009800000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d9ea370c74cd20ec4a140996a7aa787565fd82f000000000000000000000000000000000000000000000000000000000000000050c8daa176d24869d010ad74c2d374427601375ca2264e94f73784e299d572d40000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000601f8bee51b2719026f55d96977f658cc64cb6ee1421e241c30d190bfed10be69000000000000000000000000000000000000000000000000000000000000032a1f7eb591ac72141efc6f096ebcb49909c293f434a35c598ab7c7018a56485484b000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000060f8c7bcff81252df15000a0f40d9a9ad15dcd6c817041df978244294e4ba3aeb4000000000000000000000000000000000000000000000000000000000000439a87459a0b17e5d0a5fbc9207fc8ae3a05f4c01d81697d0ccca67fb2e31d2ce46f000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006000bf3e450a83105c1d44c758bdc929307b189b0fd3c0acd02e516194e93dc7c200000000000000000000000000000000000000000000000000000000000055950b12b3669cf704f9ddc3c23950c6ca31b72392fa888f3064bbfe08384d70fb96000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000060a02f2de146152643c6d9bde819ea680dbe4436181b0b5459f8819ced94e88ea70000000000000000000000000000000000000000000000000000000000002ec15c465f1168cfc4d23802ead84d2cf8e6a927209c98b43ac2da97e287e1f86ec4000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000604864259fd6849ae10dad33227f73a667e8a541940dbd27c9d989aa2aff4d78450000000000000000000000000000000000000000000000000000000000002a803c143a5a00aff01bcf3c32588ddd53ba480d712c1f7ef52b1be075378dfffb23000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000060eb3ba7851d2d7663c6213df1dc0ea3d07a6d70969299d7095955571700517ca30000000000000000000000000000000000000000000000000000000000005497c36cdd8c00644d1a5979979ea86d062624c86c08b44fdb4b8b5e54fa001fd6ef000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006041916b0c1703a520d5267a408b54319e22de54dda12af0f1f94a6cf2b1dabdc000000000000000000000000000000000000000000000000000000000000030dbd89a287530f11c46e4b53cb37c0279380d80da23352fd13242c4a78c23d6107c000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000060163218d9c337131cce0cd864744382b94bb0407cd23c5d302ec6cd52d8d02ed4000000000000000000000000000000000000000000000000000000000000153bf4c79156e7e3f758ec90010bf93066a3d319bfc427d4b41cb426c437a778dc24000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000604fef2b01ea81ecacdbf19aba28c89a389306eede7addff69c7a2d73ef0c7f0060000000000000000000000000000000000000000000000000000000000003a81b21342eced670b8ee778635326026203e079719e2163df72aabf8dddd04d9ae8000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a02963 - l1_bytecodes_supplier_addr: 0xa96c213b3a2db7d69eb4fd786b8e8d410860c06d + bridgehub_proxy_addr: 0x4555e7147f652fd5d8ecae6abd825b9ec5107e0a + message_root_proxy_addr: 0x655039df570481e4e6ff03e228247b3a641ac5d4 + transparent_proxy_admin_addr: 0x55f7e0d5dd591ce4bec72e60baf571f7616bb8fd + stm_deployment_tracker_proxy_addr: 0xb62cf164aeab16ff50c5684ebb2c69aa1281051a + native_token_vault_addr: 0x99e969b2b3c91370012f3795c088b3f7f162801f + chain_asset_handler_proxy_addr: 0xaddfadc84afc61310b22846771f6cd31c0e4d577 + governance: 0x03c82a0f005958d02d322479c1e020064d23052a + chain_admin: 0xe32555188f37cd097092c4aa1c48422917e51895 + proxy_admin: 0x55f7e0d5dd591ce4bec72e60baf571f7616bb8fd + state_transition_proxy_addr: 0x8d39a4c55968638622d9c62a77ae601a5153163b + validator_timelock_addr: 0x84196d08d7469351a1dfadcc9beffc0fc2384b12 + diamond_cut_data: 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000b0d946572bdc3b92fdfbfc30bf2fb3081e2cbd670000000000000000000000000000000000000000000000000000000000001160000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000d800000000000000000000000000000000000000000000000000000000000000e8000000000000000000000000000000000000000000000000000000000000010000000000000000000000000007ea256c6498d6e6aab1f929c26ba73923d0cc90500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000170e18b681000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f000000000000000000000000000000000000000000000000000000001b48b94a000000000000000000000000000000000000000000000000000000001cc5d1030000000000000000000000000000000000000000000000000000000021f603d700000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000023b31192000000000000000000000000000000000000000000000000000000002765d0790000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000002878fe74000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000005b8987480000000000000000000000000000000000000000000000000000000060eae0e70000000000000000000000000000000000000000000000000000000064bf8d66000000000000000000000000000000000000000000000000000000006e762e9800000000000000000000000000000000000000000000000000000000a9f6d94100000000000000000000000000000000000000000000000000000000b4fcb57700000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000c5f1f1f500000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000f9afb97e00000000000000000000000000000000000000000000000000000000000000000000000000000000297f2618bd16f7f94e71b9395162f962d8a54d3a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000003006d49e5b000000000000000000000000000000000000000000000000000000000ec6b0b700000000000000000000000000000000000000000000000000000000fe26699e0000000000000000000000000000000000000000000000000000000018e3a941000000000000000000000000000000000000000000000000000000001de72e340000000000000000000000000000000000000000000000000000000022c5cf230000000000000000000000000000000000000000000000000000000029b98c670000000000000000000000000000000000000000000000000000000033ce93fe000000000000000000000000000000000000000000000000000000003408e470000000000000000000000000000000000000000000000000000000003591c1a000000000000000000000000000000000000000000000000000000000396073820000000000000000000000000000000000000000000000000000000039d7d4aa0000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000052ef6b2c000000000000000000000000000000000000000000000000000000005a59033500000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000006a27e8b5000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000074f4d30d0000000000000000000000000000000000000000000000000000000079823c9a000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000007b30c8da000000000000000000000000000000000000000000000000000000008708474e00000000000000000000000000000000000000000000000000000000946ebad100000000000000000000000000000000000000000000000000000000960dcf240000000000000000000000000000000000000000000000000000000098acd7a6000000000000000000000000000000000000000000000000000000009cd939e4000000000000000000000000000000000000000000000000000000009d1b5a8100000000000000000000000000000000000000000000000000000000a1954fc500000000000000000000000000000000000000000000000000000000adfca15e00000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000b22dd78e00000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000cdffacc600000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000dd655bb000000000000000000000000000000000000000000000000000000000e5355c7500000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000f4ff5e2e00000000000000000000000000000000000000000000000000000000f5c1182c00000000000000000000000000000000000000000000000000000000facd743b00000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000000000000000000000000000f9fdffd47c894099b0ed8773210c40c1397cc4fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010042901c70000000000000000000000000000000000000000000000000000000007f106600000000000000000000000000000000000000000000000000000000012f43dab00000000000000000000000000000000000000000000000000000000e896760d0000000000000000000000000000000000000000000000000000000018b7fc2200000000000000000000000000000000000000000000000000000000263b7f8e00000000000000000000000000000000000000000000000000000000353d71280000000000000000000000000000000000000000000000000000000060da3e8300000000000000000000000000000000000000000000000000000000685143b90000000000000000000000000000000000000000000000000000000079cf6165000000000000000000000000000000000000000000000000000000007efda2ae00000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000d07b90d100000000000000000000000000000000000000000000000000000000da24b3ee00000000000000000000000000000000000000000000000000000000ddcc9eec00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000000000000000000000000000086ea1be44a048a83246f90a5a34c589444f21730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003a085344d000000000000000000000000000000000000000000000000000000007ca4eff7000000000000000000000000000000000000000000000000000000009271e45000000000000000000000000000000000000000000000000000000000000000000000000000000000e2d9c8af0d357f8e10acbc5ce8bfbdee7ac368f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000775ceffdf000000000000000000000000000000000000000000000000000000003b064e40000000000000000000000000000000000000000000000000000000003f42d5dd0000000000000000000000000000000000000000000000000000000041cf49bb0000000000000000000000000000000000000000000000000000000042249f9f0000000000000000000000000000000000000000000000000000000063d8882a0000000000000000000000000000000000000000000000000000000064b554ad000000000000000000000000000000000000000000000000000000000000000000000000000000002715a21107ca2af5edc160cf3806f6e8e177c75300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020b6db820000000000000000000000000000000000000000000000000000000000db9eb87000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + force_deployments_data: 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e000000000000000000000000aeadf1a4baa1347ac7a83843f67adcc3303aad3d010000f1ca07b83b60531246b392374e0e38ff8f88dd00fede945029e6a1a3d400000000000000000000000014d92a0f005958d02d322479c1e020064d23163b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000006c0000000000000000000000000000000000000000000000000000000000000082000000000000000000000000000000000000000000000000000000000000009800000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009625d21d396a0138434c4a5fbc726cdc808d5a08000000000000000000000000000000000000000000000000000000000000000050c8daa176d24869d010ad74c2d374427601375ca2264e94f73784e299d572d40000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000602808044aa6f6a9dc732d496af044debbe98b8fc96e41daddde4bcd4b57cbd8a400000000000000000000000000000000000000000000000000000000000032a17800e9e408b055384e855a1afda32c3574d0fa224f76337a3de19f59fb59739c000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006026e03b5ebc791e9782dc6bc4e04a1a2b87f972c3e22366361041e82d058dc2ff000000000000000000000000000000000000000000000000000000000000439a2fe424fafaaa2d3dc607c6b950c7119c8aff11f64c8563fbd4d20915b49e6d91000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000060aa9e942ba0c8a15462987111090ed80bdbdede38709574b609a07f02d75f69b2000000000000000000000000000000000000000000000000000000000000559525f3f493b536ccb07ba658567f1bfac76963d90a1660bd4c14aca821b06c0472000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000605a7d947e11a5e714fbaff10c4054c255f47c65227ef105c11e1f2ceb293b27990000000000000000000000000000000000000000000000000000000000002ec19078a63aab8caef8bdedb5f0b35744fe6c7be478d72c4ec8e133018e0d281dd5000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006054676cbb501f654b5322f477873c1354ef0c50a28352ea261dc09bf1ba1cc2f70000000000000000000000000000000000000000000000000000000000002a80f40a8872c814ed3dfdd103d72768cb2ff575fe69fe63cde4c31df87783b6955e000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000605376700161b668dffc5128790cb65beefa48427c8cc73df1ee71a1ca7a6a50c0000000000000000000000000000000000000000000000000000000000000546b9114db7ea1a8f7a639be8aed01f62404e7cb5f5429f27ea3008c2b3eb9ee153f000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006003e28832df3083fdeb54f1be6187f804807e1295718514d97aaa9983865f27e3000000000000000000000000000000000000000000000000000000000000336ec0846416c307bac37aa9e3ebd2f59dfd009adead92896929541eea67a183a7ce000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000609c7349455110b1150f0b5cabc8f7ce49a1bb39a296704d1bbba22c89cd5bf173000000000000000000000000000000000000000000000000000000000000153b7f32d622a146df551f43ffe9a5a720c2e5e8c4a07b1d605977350b6969964bab000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a029630000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000602f867a675945a4bb14cca98ae79c2a794bbadf6797c5fa2a9557d8d7bab525650000000000000000000000000000000000000000000000000000000000003a81cd88f8ef2a5930151a53b734017e4872de6349bf54e95950a5f407ceddd52b29000000000000000000000000000000000000000000000000000000000000006032ea3aeeecb44a8ce7932791f33569a767fe882986c537a4c393ea72eb2db2180000000000000000000000000000000000000000000000000000000000000e4327890f18a84b510bf78368f3a5f21b3d4d630a17afe54ede365487df01a02963 + l1_bytecodes_supplier_addr: 0xadfa35e51bc33233268e39ca495432cf0c7ecb52 l1_wrapped_base_token_store: null - server_notifier_proxy_addr: 0x12135c2dbac1541777d5b0278e4c02dd844813ad - default_upgrade_addr: 0xa3302a028fc10b3aeeee9b7c461068208262fd7d - genesis_upgrade_addr: 0xe5f9eec1bf02ea6fb28020a8b6aec91d86e2fc5d - verifier_addr: 0xc3d80a792b78c49259291d5691564265b3fdb42a + server_notifier_proxy_addr: 0x50bec3afa0884fbe6fe3831919a348c321dd029c + default_upgrade_addr: 0x7706c2d7c5ed4be12f40588b5308668f28b0d46f + genesis_upgrade_addr: 0xd25341d6cb6327d12274ded0f5c6c0f22efca5fe + verifier_addr: 0x6d82e1dbebb8cb950cde6cd90744d01ed6985980 rollup_l1_da_validator_addr: 0x5be9468566a91e9979cc432a07998424b2f8c264 no_da_validium_l1_validator_addr: 0xd58fcbfe780248fe8d7bcb20e1d423cd4153e32f avail_l1_da_validator_addr: 0x7ad5989a2689d5fbf7e5efa66d1367da262dda9c - l1_rollup_da_manager: 0x65c06657b089cd1878035d7bc85c2f8949805125 + l1_rollup_da_manager: 0xcc9cbc2c68cde73cd7cad80802f819309b1b8613 blobs_zksync_os_l1_da_validator_addr: 0xbbbc7b190b4b01b1ec4f4df1a555a2709ef78bfd bridges: erc20: - l1_address: 0x504708f7656603a7375ce8e07e7edf743b8ab392 + l1_address: 0x9180770d314d5e6ae240a97edb7e0e08cdea12d0 l2_address: '0x0000000000000000000000000000000000010003' shared: - l1_address: 0xe7e43b470aadc58c3dfd6563658c7967c3fcceb5 + l1_address: 0xaeadf1a4baa1347ac7a83843f67adcc3303aad3d l2_address: '0x0000000000000000000000000000000000010003' - l1_nullifier_addr: 0x93d3649078601b635229eb2133bbbbae73f3541e + l1_nullifier_addr: 0x31c0e36cff47a36168e2c77aec82a60fa48327db l1: - default_upgrade_addr: 0xa3302a028fc10b3aeeee9b7c461068208262fd7d - diamond_proxy_addr: 0x05d4e114b067034d0d9dfe717e7ed98a8d429b2e - governance_addr: 0x272ad63c554f88099bc9cfc8ddfa7540738dcc1a - chain_admin_addr: 0x16cac0fe23ef4aa799d83074e91704113fb88da7 + default_upgrade_addr: 0x7706c2d7c5ed4be12f40588b5308668f28b0d46f + diamond_proxy_addr: 0x2f1dcaaaebe60175eb9ef5a504eb21ccce3a1a0d + governance_addr: 0x0984884f7e2081fb50373cc8e29f21c1091bd6f2 + chain_admin_addr: 0xc9efacdd71f120bf44ee31a6eade648235added9 access_control_restriction_addr: '0x0000000000000000000000000000000000000000' - chain_proxy_admin_addr: 0x6b156a18922f6bc4917924faa26d146ffc63015a + chain_proxy_admin_addr: 0x77b3cd20dd31aa46d27b1733c3b58e987d8ee542 multicall3_addr: 0x962bd50403f6c3fe555f4585114296753c84c651 - verifier_addr: 0xc3d80a792b78c49259291d5691564265b3fdb42a - validator_timelock_addr: 0x89466662ab79c875b1e637eb0fd169d11937eac8 + verifier_addr: 0x6d82e1dbebb8cb950cde6cd90744d01ed6985980 + validator_timelock_addr: 0x84196d08d7469351a1dfadcc9beffc0fc2384b12 base_token_addr: '0x0000000000000000000000000000000000000001' base_token_asset_id: 0x52f431aa35dd80982e3c66614112503ca2c6e344745f4a2bcfc9bd7e09c75584 rollup_l1_da_validator_addr: 0x5be9468566a91e9979cc432a07998424b2f8c264 @@ -51,8 +51,7 @@ l1: no_da_validium_l1_validator_addr: 0xd58fcbfe780248fe8d7bcb20e1d423cd4153e32f l2: testnet_paymaster_addr: '0x0000000000000000000000000000000000000000' - default_l2_upgrader: 0x9cea59f11ebd0c893128f3cf7cd5b67bb2511440 - l2_native_token_vault_proxy_addr: '0x0000000000000000000000000000000000010004' - consensus_registry: 0x9c77addf8b68a5c5e5842b005d8f1813804906b0 - multicall3: 0x84da27f1051d8d9ee83d8133336052eb4cb52cb4 - timestamp_asserter_addr: 0x5ffb70f82ae09ac8770fcc3af2bde4b8955fd7d6 + default_l2_upgrader: '0x0000000000000000000000000000000000000000' + consensus_registry: null + multicall3: null + timestamp_asserter_addr: null diff --git a/local-chains/v31.0/multi_chain/wallets_506.yaml b/local-chains/v31.0/multi_chain/wallets_506.yaml new file mode 100644 index 000000000..1f9af4c26 --- /dev/null +++ b/local-chains/v31.0/multi_chain/wallets_506.yaml @@ -0,0 +1,24 @@ +deployer: + address: 0xf0efa9f96861926bdd2cf6ab897684a9cb8c5867 + private_key: 0xa74227dba833a6cdbc31e1bf9323f4e8cccdba36a709878bc4c91a9c9737b16f +operator: + address: 0x1ea7a350f83849a0b3dbb1789f26ed3c62f485fa + private_key: 0xb9b8eec0a248289539f48f098fb1441e8a605e78243b9ee2be2ea8d5e272ac6c +blob_operator: + address: 0x7da4ec90a1212ca72c1ab74380e35a89368cea4e + private_key: 0x3ba203f4d1aa1f52b6fc890083b9ca42005fa10d52c45ab43049cb0c7a1137fd +prove_operator: + address: 0x8a0aea51876fccd2d8d9f4bb06adca98eda9f4c5 + private_key: 0x3b238563d120e58ad6747d5d573d19abe80ac5aa22414ec737463f61187443d8 +execute_operator: + address: 0x2d92fdfa82d099682ae1fd636bc7503f41dcd73a + private_key: 0x796621a4396f414d665ab3e20ad7f3402b43d0648f23c543398cef923a2933e4 +fee_account: + address: 0x7518d19e9f63d0d29390f1cfce45e3b84d66e4c9 + private_key: 0x35dae80ce15a5c5aa4b1bd2768c91e9b079f520af239b780603431b9f498c045 +governor: + address: 0x97111082147d7c30293bb59bd21fb9309e836a61 + private_key: 0x9df9ef3b8ff88c67b61fc2c2d19f3eaf7b93642c4a394b8de4d068ffc30faa31 +token_multiplier_setter: + address: 0x56d2e3e233125c0accd9a78f535b3989241f2621 + private_key: 0xeb5f4b8f63b64262c0414f49a84452d93fab36bc58a57f11172fc00c86612f47 diff --git a/local-chains/v31.0/multi_chain/wallets_6565.yaml b/local-chains/v31.0/multi_chain/wallets_6565.yaml index 2edf27b4c..90d9f6279 100644 --- a/local-chains/v31.0/multi_chain/wallets_6565.yaml +++ b/local-chains/v31.0/multi_chain/wallets_6565.yaml @@ -1,24 +1,24 @@ deployer: - address: 0x3232339f0bd12ee1b6bad4b47cef766957ddd00a - private_key: 0xc60d0d0b85d4c22d231134ca186993507f2cda5f68937b31f750e942dafb5de0 + address: 0x7d98507468eaf79109183e0287b9b5da5c7bd053 + private_key: 0x742f45401b041f02c5fd6c08ea41fb6bc4928ee2759da5d1f7c92dcd4a981c2b operator: - address: 0xac61d2ba8e3e4fcabc32c1dfce1e8eedf4332aa2 - private_key: 0x9f26fc1d7da1f2b9ea575dca41d29412b685317faf7264ecb01b95989a0f8408 + address: 0x6c8087d1fd8d2ecbc08ff099fa843e182ff45b3e + private_key: 0xe6ea0a41bb989b0520d51d3d342ae238d805e99c3190fc9b8acf0bc38a826c2f blob_operator: - address: 0xa9a7ef1c88dfaf07472cdb3d39afda1efc6e50b3 - private_key: 0x62364ecc1a0007cc3ba165e57000a5d890f2d69d9e9b4a1e9e86af646c1f9b25 + address: 0x07a6db68608d27fec52d26134b78fb69d036b765 + private_key: 0xf7ec9b98e8aac328a26918dfbda929aaa65249e3b462de1e48514ea97d7d23e2 prove_operator: - address: 0x43b66eaf128dcf1b18531e7abe8cf739c3c69912 - private_key: 0xcfa9ab3c4cf0c6e4d207cf84cb95bbf87885174182f91b9c947b2c7a6b89439d + address: 0x092570ee15b5e662a53c90e00ab2599b34634775 + private_key: 0x0cfe28a8ef7157c8da8facdcb5cca7c3d80bae3539f1e35489f99559085e8ca0 execute_operator: - address: 0x1ed7e4a8a24387954a969677d52324096da50dae - private_key: 0xf292a0f460be19ab73c57c33d4a979ddf6cf4385c86d12158b393ece98ad4d30 + address: 0xbee510dfd30e22c4a7e5dfad6beb4b4d636e30d7 + private_key: 0x7d0adab79777ca45db9ffbf5559af45e3d5d045a5a7df0c7bc111570151e8481 fee_account: - address: 0x1a515ab21e274e2c8286f85ac77dde6f014dd2e0 - private_key: 0x026ebaefce581e7c759cd2e60b360003b7399335ac4e3bfbf78666b7adc9ce99 + address: 0xdee9520886d1ba905d37c20d4241d1f0c635fc2b + private_key: 0x7890ae2c1721de9aa719df73a9de6b3e68b5a1489d76fe456a6e86577bb13e1f governor: - address: 0x0cd32d32e48918e7d6f89c883e8f40f7b116dfa2 - private_key: 0xe5fc62dec39cfc73318ca42c49b65be1eb1cf5d26f9e2e102145521a7133b0ba + address: 0x4a70bcafa24b04b1d2bca3fb1024b6531d0e2373 + private_key: 0x0ee2e03b92a88484ece59568bf536a6cbcab6ec0f9f97d9251b0be937bcbce88 token_multiplier_setter: - address: 0x3ecba6930f15b098763bc8e6b59a21924ef452e3 - private_key: 0xd92dec05f55c2ba90c632bab8ecdd34db770c7b8c6ce28d047d49fe8d1afeb93 + address: 0xc3fa0c4b9b0f63291ebe2c2fa428f8ddc3873a2c + private_key: 0xf4e991495ab209ea213381746c06377ec94532ba93d8d25dfe48aec4c4dcfebe diff --git a/local-chains/v31.0/multi_chain/wallets_6566.yaml b/local-chains/v31.0/multi_chain/wallets_6566.yaml index a3930fd53..ee304e19d 100644 --- a/local-chains/v31.0/multi_chain/wallets_6566.yaml +++ b/local-chains/v31.0/multi_chain/wallets_6566.yaml @@ -1,24 +1,24 @@ deployer: - address: 0xc597c3461c1fbd198b29f536176f8c855c10de7e - private_key: 0x4179dda70e4364fd307fe08fa00126dfcdce32e058ed55b1ae95eba947ab6b0e + address: 0x12fa3937dd72151af4454877ffada8f61f1cadd5 + private_key: 0x7f0446837c2dd6a788a4ba8d61148c0caebdb0aa6b876c1a312623cb81f8a6df operator: - address: 0xc3de62b39bd3692d649a3a4a93c3e70a9c72cde7 - private_key: 0x7c7ce08daad4abe14b1365a59c8f8c4c07999d4612b7560ada270a51442a9591 + address: 0xcdd06d47833718d7cdcba0739f3fa32562380d78 + private_key: 0xee4e86e1adc987c66c6ebcca6e7e54d05b31f539d87217a7e2c231a31d786d23 blob_operator: - address: 0x2ffedcd02245d3284c2237eb1ab3e5ba343f2d22 - private_key: 0xd03068bc4c65805abe734dd83b59eb2efe5013bf99c934e94241f78a2ded2aaa + address: 0x50c675fff8d9fcc96e0976ddebe77cfe83904fee + private_key: 0x4487ccbac778f614bc0a92f2589eba48bd60be9a38987f641938d588cda37570 prove_operator: - address: 0xdd34dec0f25e54b4b5d4606f4ebf97352e760fbb - private_key: 0x18382cc95097e05b51834ab30572823f0ed257e6d548fc4a8e0240c7617b9b74 + address: 0x9b5b7ecfb59198ee82951ba7e756e16acd01eb6e + private_key: 0xbb696e11b564d2748ec3161065f45dee47f5cd76a063e9b804cc1788fb6cb37d execute_operator: - address: 0x5eaa8ebe03ed7def408b07563296e62a04c3244c - private_key: 0x43e30cab9abf28e4fbd73628bac87ee7452b302d28eb16bfa5abefdf2acfcc2b + address: 0xb49be03afa9dfabb2b2c44bc8ddb69048e424c10 + private_key: 0xf4b55e4e10a71273570e9f952c76095d23819fca57d2f2cbcf618e76e4276213 fee_account: - address: 0x4be7d76cab8c36da6971cf8a698251124c4e1de7 - private_key: 0x389b21906245e3dfa5457701b3cf2fbc39de251b6b1a7b8489f8ca5b14db17b5 + address: 0xe974e3f6c0810ff47cee01ce0b62641231e34c15 + private_key: 0x5bfa814929e29d4adbd6aa22f78cba6f139862c8a6af22002bb887ce7a293367 governor: - address: 0x794af37a8a2eb4caa26e8478fc178e9bb92f0161 - private_key: 0x629dc8721ff095c44ea4fb1461ea07f8d0d4d773fc66986136e461a10bf9c8cf + address: 0x867aef9366b05e77e55b48cd2e94e04207f1db74 + private_key: 0x62e41c513793b81afb048d94f5af304a4705d41b0f5fc332e1358f73c7f8c34d token_multiplier_setter: - address: 0xbb49ef4af8392b94ff18e2ceabaff1653ce3819a - private_key: 0xceb7fa9e301da712fae9c31bd02f14e653db85558c6610c8df321eb06d4ef7d9 + address: 0xf92745e4418e1b2512fbdf8ac74914a1526c29fd + private_key: 0xe23186f6b6eb30498158314508b124a115bc371628ab29317d9d39293337b168 diff --git a/local-chains/v31.0/versions.yaml b/local-chains/v31.0/versions.yaml index ed11a491e..0760eabe8 100644 --- a/local-chains/v31.0/versions.yaml +++ b/local-chains/v31.0/versions.yaml @@ -6,15 +6,15 @@ era-contracts: # TODO: remove branch and put tag and sha when the release is done #branch: "draft-v31-with-zksync-os" # tag: "TBD" - sha: "052cb88fba0f8bf4acc56e06083eece97cc66c82" + sha: "4d54a438e3a6b7777919e45b9b7c843265231d80" zkstack-cli: # TODO: remove branch and put tag and sha when the release is done #branch: "draft-v31" # tag: "TBD" - sha: "5cb9b972cdb34c7573955b4cebb1ed175bf77142" + sha: "236c37a947874bf7b2b06840251bd4b5566fc716" -# todo: this is not relevant for now, will be updated once migration to zksync-os-scripts is finished -#zksync-os-workflows: +zksync-os-scripts: + # TODO: remove branch and put tag and sha when the release is done # tag: "TBD" -# sha: "TBD" + sha: "a3f4fc806ed22ac3382cca394354a68de67f904c" diff --git a/node/bin/src/config/mod.rs b/node/bin/src/config/mod.rs index cfdc0ec50..b2d21c278 100644 --- a/node/bin/src/config/mod.rs +++ b/node/bin/src/config/mod.rs @@ -231,6 +231,10 @@ pub struct GeneralConfig { /// Disables all HTTP APIs except JSON RPC. #[config(default_t = false, alias = "sandbox")] pub ephemeral: bool, + + /// Path to ephemeral state to load at startup. + #[config(default_t = None)] + pub ephemeral_state: Option, } #[derive(Clone, Debug, DescribeConfig, DeserializeConfig)] diff --git a/node/bin/src/main.rs b/node/bin/src/main.rs index 6daf113a2..43c44ce42 100644 --- a/node/bin/src/main.rs +++ b/node/bin/src/main.rs @@ -1,5 +1,6 @@ use clap::{Parser, Subcommand}; use smart_config::{ConfigRepository, ConfigSources, Environment, Json, Yaml}; +use std::process::Command; use std::{fs, future, path::Path, time::Duration}; use tempfile::TempDir; use tokio::signal::unix::{SignalKind, signal}; @@ -158,6 +159,9 @@ pub async fn main() { // ======= Run tasks =========== let main_stop = stop_receiver.clone(); // keep original for Prometheus let ephemeral_enabled = config.general_config.ephemeral; + if !ephemeral_enabled && config.general_config.ephemeral_state.is_some() { + panic!("`ephemeral_state` requires `ephemeral` mode to be enabled"); + } let _ephemeral_guard = ephemeral_enabled.then(|| enable_ephemeral_mode(&mut config)); let prometheus_port = config.observability_config.prometheus.port; @@ -410,6 +414,28 @@ fn enable_ephemeral_mode(config: &mut Config) -> Option { // todo: consider force-disabling // config.network_config.enabled = false; + if let Some(ephemeral_state) = &config.general_config.ephemeral_state { + tracing::info!("Loading ephemeral state from {}", ephemeral_state.display()); + let status = Command::new("tar") + .args([ + "-xvf", + ephemeral_state.to_string_lossy().as_ref(), + &format!( + "--one-top-level={}", + config.general_config.rocks_db_path.to_string_lossy() + ), + ]) + .status() + .expect("failed to call `tar` command; ensure it is present on your machine"); + if !status.success() { + panic!( + "`tar` command failed to decompress ephemeral state from `{}` to `{}`", + ephemeral_state.display(), + config.general_config.rocks_db_path.display(), + ); + } + } + Some(tempdir) }