60806040523480156200001157600080fd5b506040518060400160405280601d81526020017f436861696e6c696e6b20426f6f7463616d70203230323420546f6b656e0000008152506040518060400160405280600881526020017f434c426f6f74323400000000000000000000000000000000000000000000000081525081600390816200008f9190620004d0565b508060049081620000a19190620004d0565b505050620000b96000801b33620000f160201b60201c565b620000eb7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620000f160201b60201c565b620005b7565b620001038282620001e360201b60201c565b620001df5760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001846200024e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002d857607f821691505b602082108103620002ee57620002ed62000290565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000319565b62000364868362000319565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003b1620003ab620003a5846200037c565b62000386565b6200037c565b9050919050565b6000819050919050565b620003cd8362000390565b620003e5620003dc82620003b8565b84845462000326565b825550505050565b600090565b620003fc620003ed565b62000409818484620003c2565b505050565b5b81811015620004315762000425600082620003f2565b6001810190506200040f565b5050565b601f82111562000480576200044a81620002f4565b620004558462000309565b8101602085101562000465578190505b6200047d620004748562000309565b8301826200040e565b50505b505050565b600082821c905092915050565b6000620004a56000198460080262000485565b1980831691505092915050565b6000620004c0838362000492565b9150826002028217905092915050565b620004db8262000256565b67ffffffffffffffff811115620004f757620004f662000261565b5b620005038254620002bf565b6200051082828562000435565b600060209050601f83116001811462000548576000841562000533578287015190505b6200053f8582620004b2565b865550620005af565b601f1984166200055886620002f4565b60005b8281101562000582578489015182556001820191506020850194506020810190506200055b565b86831015620005a257848901516200059e601f89168262000492565b8355505b6001600288020188555050505b505050505050565b61213180620005c76000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806340c10f19116100ad578063a457c2d711610071578063a457c2d71461036b578063a9059cbb1461039b578063d5391393146103cb578063d547741f146103e9578063dd62ed3e146104055761012c565b806340c10f19146102b357806370a08231146102cf57806391d14854146102ff57806395d89b411461032f578063a217fddf1461034d5761012c565b8063248a9ca3116100f4578063248a9ca3146101fd5780632f2ff15d1461022d578063313ce5671461024957806336568abe1461026757806339509351146102835761012c565b806301ffc9a71461013157806306fdde0314610161578063095ea7b31461017f57806318160ddd146101af57806323b872dd146101cd575b600080fd5b61014b60048036038101906101469190611548565b610435565b6040516101589190611590565b60405180910390f35b6101696104af565b604051610176919061163b565b60405180910390f35b610199600480360381019061019491906116f1565b610541565b6040516101a69190611590565b60405180910390f35b6101b7610564565b6040516101c49190611740565b60405180910390f35b6101e760048036038101906101e2919061175b565b61056e565b6040516101f49190611590565b60405180910390f35b610217600480360381019061021291906117e4565b61059d565b6040516102249190611820565b60405180910390f35b6102476004803603810190610242919061183b565b6105bd565b005b6102516105de565b60405161025e9190611897565b60405180910390f35b610281600480360381019061027c919061183b565b6105e7565b005b61029d600480360381019061029891906116f1565b61066a565b6040516102aa9190611590565b60405180910390f35b6102cd60048036038101906102c891906116f1565b6106a1565b005b6102e960048036038101906102e491906118b2565b6106da565b6040516102f69190611740565b60405180910390f35b6103196004803603810190610314919061183b565b610722565b6040516103269190611590565b60405180910390f35b61033761078d565b604051610344919061163b565b60405180910390f35b61035561081f565b6040516103629190611820565b60405180910390f35b610385600480360381019061038091906116f1565b610826565b6040516103929190611590565b60405180910390f35b6103b560048036038101906103b091906116f1565b61089d565b6040516103c29190611590565b60405180910390f35b6103d36108c0565b6040516103e09190611820565b60405180910390f35b61040360048036038101906103fe919061183b565b6108e4565b005b61041f600480360381019061041a91906118df565b610905565b60405161042c9190611740565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104a857506104a78261098c565b5b9050919050565b6060600380546104be9061194e565b80601f01602080910402602001604051908101604052809291908181526020018280546104ea9061194e565b80156105375780601f1061050c57610100808354040283529160200191610537565b820191906000526020600020905b81548152906001019060200180831161051a57829003601f168201915b5050505050905090565b60008061054c6109f6565b90506105598185856109fe565b600191505092915050565b6000600254905090565b6000806105796109f6565b9050610586858285610bc7565b610591858585610c53565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b6105c68261059d565b6105cf81610ed2565b6105d98383610ee6565b505050565b60006002905090565b6105ef6109f6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461065c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610653906119f1565b60405180910390fd5b6106668282610fc7565b5050565b6000806106756109f6565b90506106968185856106878589610905565b6106919190611a40565b6109fe565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66106cb81610ed2565b6106d583836110a9565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606004805461079c9061194e565b80601f01602080910402602001604051908101604052809291908181526020018280546107c89061194e565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b5050505050905090565b6000801b81565b6000806108316109f6565b9050600061083f8286610905565b905083811015610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b90611ae6565b60405180910390fd5b61089182868684036109fe565b60019250505092915050565b6000806108a86109f6565b90506108b5818585610c53565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6108ed8261059d565b6108f681610ed2565b6109008383610fc7565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6490611b78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390611c0a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610bba9190611740565b60405180910390a3505050565b6000610bd38484610905565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c4d5781811015610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3690611c76565b60405180910390fd5b610c4c84848484036109fe565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb990611d08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2890611d9a565b60405180910390fd5b610d3c838383611208565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990611e2c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e559190611a40565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eb99190611740565b60405180910390a3610ecc84848461120d565b50505050565b610ee381610ede6109f6565b611212565b50565b610ef08282610722565b610fc35760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610f686109f6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b610fd18282610722565b156110a55760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061104a6109f6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110f90611e98565b60405180910390fd5b61112460008383611208565b80600260008282546111369190611a40565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461118b9190611a40565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111f09190611740565b60405180910390a36112046000838361120d565b5050565b505050565b505050565b61121c8282610722565b6112ab576112418173ffffffffffffffffffffffffffffffffffffffff1660146112af565b61124f8360001c60206112af565b604051602001611260929190611f8c565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a2919061163b565b60405180910390fd5b5050565b6060600060028360026112c29190611fc6565b6112cc9190611a40565b67ffffffffffffffff8111156112e5576112e4612008565b5b6040519080825280601f01601f1916602001820160405280156113175781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061134f5761134e612037565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106113b3576113b2612037565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026113f39190611fc6565b6113fd9190611a40565b90505b600181111561149d577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061143f5761143e612037565b5b1a60f81b82828151811061145657611455612037565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061149690612066565b9050611400565b50600084146114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d8906120db565b60405180910390fd5b8091505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611525816114f0565b811461153057600080fd5b50565b6000813590506115428161151c565b92915050565b60006020828403121561155e5761155d6114eb565b5b600061156c84828501611533565b91505092915050565b60008115159050919050565b61158a81611575565b82525050565b60006020820190506115a56000830184611581565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156115e55780820151818401526020810190506115ca565b60008484015250505050565b6000601f19601f8301169050919050565b600061160d826115ab565b61161781856115b6565b93506116278185602086016115c7565b611630816115f1565b840191505092915050565b600060208201905081810360008301526116558184611602565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116888261165d565b9050919050565b6116988161167d565b81146116a357600080fd5b50565b6000813590506116b58161168f565b92915050565b6000819050919050565b6116ce816116bb565b81146116d957600080fd5b50565b6000813590506116eb816116c5565b92915050565b60008060408385031215611708576117076114eb565b5b6000611716858286016116a6565b9250506020611727858286016116dc565b9150509250929050565b61173a816116bb565b82525050565b60006020820190506117556000830184611731565b92915050565b600080600060608486031215611774576117736114eb565b5b6000611782868287016116a6565b9350506020611793868287016116a6565b92505060406117a4868287016116dc565b9150509250925092565b6000819050919050565b6117c1816117ae565b81146117cc57600080fd5b50565b6000813590506117de816117b8565b92915050565b6000602082840312156117fa576117f96114eb565b5b6000611808848285016117cf565b91505092915050565b61181a816117ae565b82525050565b60006020820190506118356000830184611811565b92915050565b60008060408385031215611852576118516114eb565b5b6000611860858286016117cf565b9250506020611871858286016116a6565b9150509250929050565b600060ff82169050919050565b6118918161187b565b82525050565b60006020820190506118ac6000830184611888565b92915050565b6000602082840312156118c8576118c76114eb565b5b60006118d6848285016116a6565b91505092915050565b600080604083850312156118f6576118f56114eb565b5b6000611904858286016116a6565b9250506020611915858286016116a6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061196657607f821691505b6020821081036119795761197861191f565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006119db602f836115b6565b91506119e68261197f565b604082019050919050565b60006020820190508181036000830152611a0a816119ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a4b826116bb565b9150611a56836116bb565b9250828201905080821115611a6e57611a6d611a11565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611ad06025836115b6565b9150611adb82611a74565b604082019050919050565b60006020820190508181036000830152611aff81611ac3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611b626024836115b6565b9150611b6d82611b06565b604082019050919050565b60006020820190508181036000830152611b9181611b55565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611bf46022836115b6565b9150611bff82611b98565b604082019050919050565b60006020820190508181036000830152611c2381611be7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611c60601d836115b6565b9150611c6b82611c2a565b602082019050919050565b60006020820190508181036000830152611c8f81611c53565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611cf26025836115b6565b9150611cfd82611c96565b604082019050919050565b60006020820190508181036000830152611d2181611ce5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611d846023836115b6565b9150611d8f82611d28565b604082019050919050565b60006020820190508181036000830152611db381611d77565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611e166026836115b6565b9150611e2182611dba565b604082019050919050565b60006020820190508181036000830152611e4581611e09565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611e82601f836115b6565b9150611e8d82611e4c565b602082019050919050565b60006020820190508181036000830152611eb181611e75565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000611ef9601783611eb8565b9150611f0482611ec3565b601782019050919050565b6000611f1a826115ab565b611f248185611eb8565b9350611f348185602086016115c7565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000611f76601183611eb8565b9150611f8182611f40565b601182019050919050565b6000611f9782611eec565b9150611fa38285611f0f565b9150611fae82611f69565b9150611fba8284611f0f565b91508190509392505050565b6000611fd1826116bb565b9150611fdc836116bb565b9250828202611fea816116bb565b9150828204841483151761200157612000611a11565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612071826116bb565b91506000820361208457612083611a11565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006120c56020836115b6565b91506120d08261208f565b602082019050919050565b600060208201905081810360008301526120f4816120b8565b905091905056fea26469706673582212204236de014b17d8a9c0737d44bc0bd55e0f360f69a1012c902312e4c2594f6ff364736f6c63430008130033