608060405234801561001057600080fd5b50615513806100206000396000f3fe60806040523480156200001157600080fd5b50600436106200002e5760003560e01c8063a93d073d1462000033575b600080fd5b6200005160048036038101906200004b919062000220565b62000069565b604051620000609190620002e9565b60405180910390f35b6000808787878787876040516200008090620000fa565b62000091969594939291906200037b565b604051809103906000f080158015620000ae573d6000803e3d6000fd5b5090507f33c981baba081f8fd2c52ac6ad1ea95b6814b4376640f55689051f65847296883382604051620000e4929190620003da565b60405180910390a1809150509695505050505050565b6150d6806200040883390190565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200013f8262000112565b9050919050565b620001518162000132565b81146200015d57600080fd5b50565b600081359050620001718162000146565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126200019f576200019e62000177565b5b8235905067ffffffffffffffff811115620001bf57620001be6200017c565b5b602083019150836001820283011115620001de57620001dd62000181565b5b9250929050565b6000819050919050565b620001fa81620001e5565b81146200020657600080fd5b50565b6000813590506200021a81620001ef565b92915050565b6000806000806000806080878903121562000240576200023f62000108565b5b60006200025089828a0162000160565b965050602087013567ffffffffffffffff8111156200027457620002736200010d565b5b6200028289828a0162000186565b9550955050604087013567ffffffffffffffff811115620002a857620002a76200010d565b5b620002b689828a0162000186565b93509350506060620002cb89828a0162000209565b9150509295509295509295565b620002e38162000132565b82525050565b6000602082019050620003006000830184620002d8565b92915050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600062000345838562000306565b93506200035483858462000317565b6200035f8362000326565b840190509392505050565b6200037581620001e5565b82525050565b6000608082019050620003926000830189620002d8565b8181036020830152620003a781878962000337565b90508181036040830152620003be81858762000337565b9050620003cf60608301846200036a565b979650505050505050565b6000604082019050620003f16000830185620002d8565b620004006020830184620002d8565b939250505056fe60806040523480156200001157600080fd5b50604051620050d6380380620050d6833981810160405281019062000037919062000550565b828281600090805190602001906200005192919062000263565b5080600190805190602001906200006a92919062000263565b5050506001600a819055506daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30733cc6cdda760b79bafa08df41ecfa224f810dceb66040518363ffffffff1660e01b8152600401620000d492919062000611565b600060405180830381600087803b158015620000ef57600080fd5b505af115801562000104573d6000803e3d6000fd5b5050505080600c8190555083601160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000161846200019d60201b60201c565b6040518060800160405280605281526020016200508460529139601090805190602001906200019292919062000263565b5050505050620006a2565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000271906200066d565b90600052602060002090601f016020900481019282620002955760008555620002e1565b82601f10620002b057805160ff1916838001178555620002e1565b82800160010185558215620002e1579182015b82811115620002e0578251825591602001919060010190620002c3565b5b509050620002f09190620002f4565b5090565b5b808211156200030f576000816000905550600101620002f5565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003548262000327565b9050919050565b620003668162000347565b81146200037257600080fd5b50565b60008151905062000386816200035b565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003e18262000396565b810181811067ffffffffffffffff82111715620004035762000402620003a7565b5b80604052505050565b60006200041862000313565b9050620004268282620003d6565b919050565b600067ffffffffffffffff821115620004495762000448620003a7565b5b620004548262000396565b9050602081019050919050565b60005b838110156200048157808201518184015260208101905062000464565b8381111562000491576000848401525b50505050565b6000620004ae620004a8846200042b565b6200040c565b905082815260208101848484011115620004cd57620004cc62000391565b5b620004da84828562000461565b509392505050565b600082601f830112620004fa57620004f96200038c565b5b81516200050c84826020860162000497565b91505092915050565b6000819050919050565b6200052a8162000515565b81146200053657600080fd5b50565b6000815190506200054a816200051f565b92915050565b600080600080608085870312156200056d576200056c6200031d565b5b60006200057d8782880162000375565b945050602085015167ffffffffffffffff811115620005a157620005a062000322565b5b620005af87828801620004e2565b935050604085015167ffffffffffffffff811115620005d357620005d262000322565b5b620005e187828801620004e2565b9250506060620005f48782880162000539565b91505092959194509250565b6200060b8162000347565b82525050565b600060408201905062000628600083018562000600565b62000637602083018462000600565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200068657607f821691505b6020821081036200069c576200069b6200063e565b5b50919050565b6149d280620006b26000396000f3fe6080604052600436106101e35760003560e01c80634dad89071161010257806395d89b4111610095578063c87b56dd11610064578063c87b56dd146106d2578063cabadaa01461070f578063e985e9c51461073a578063f2fde38b14610777576101e3565b806395d89b411461062c5780639ac8644b14610657578063a22cb46514610680578063b88d4fde146106a9576101e3565b806370a08231116100d157806370a0823114610572578063866b731f146105af5780638da5cb5b146105d8578063931688cb14610603576101e3565b80634dad8907146104b15780634f6ccce7146104cd5780636352211e1461050a5780636c0360eb14610547576101e3565b806318b3446d1161017a5780632f745c59116101495780632f745c59146103f757806336f6aeac1461043457806341f434341461045d57806342842e0e14610488576101e3565b806318b3446d1461035e57806323b872dd14610389578063261775e3146103b25780632aadf692146103ce576101e3565b80630d3c69b4116101b65780630d3c69b4146102b65780631182ec25146102df57806316b4f75a1461030857806318160ddd14610333576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190613374565b6107a0565b60405161021c91906133bc565b60405180910390f35b34801561023157600080fd5b5061023a61081a565b6040516102479190613470565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906134c8565b6108ac565b6040516102849190613536565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af919061357d565b6108f2565b005b3480156102c257600080fd5b506102dd60048036038101906102d891906134c8565b610a09565b005b3480156102eb57600080fd5b50610306600480360381019061030191906135bd565b610aef565b005b34801561031457600080fd5b5061031d610b3b565b60405161032a9190613536565b60405180910390f35b34801561033f57600080fd5b50610348610b61565b60405161035591906135f9565b60405180910390f35b34801561036a57600080fd5b50610373610b6e565b60405161038091906133bc565b60405180910390f35b34801561039557600080fd5b506103b060048036038101906103ab9190613614565b610b81565b005b6103cc60048036038101906103c791906136cc565b610bd0565b005b3480156103da57600080fd5b506103f560048036038101906103f091906137ec565b610dd8565b005b34801561040357600080fd5b5061041e6004803603810190610419919061357d565b610ffb565b60405161042b91906135f9565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190613899565b6110a0565b005b34801561046957600080fd5b506104726110c5565b60405161047f9190613925565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190613614565b6110d7565b005b6104cb60048036038101906104c691906136cc565b611126565b005b3480156104d957600080fd5b506104f460048036038101906104ef91906134c8565b611373565b60405161050191906135f9565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c91906134c8565b6113e4565b60405161053e9190613536565b60405180910390f35b34801561055357600080fd5b5061055c61146a565b6040516105699190613470565b60405180910390f35b34801561057e57600080fd5b50610599600480360381019061059491906135bd565b6114f8565b6040516105a691906135f9565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d19190613940565b6115af565b005b3480156105e457600080fd5b506105ed611622565b6040516105fa9190613536565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190613940565b611648565b005b34801561063857600080fd5b506106416116ce565b60405161064e9190613470565b60405180910390f35b34801561066357600080fd5b5061067e600480360381019061067991906139e3565b611760565b005b34801561068c57600080fd5b506106a760048036038101906106a29190613a30565b611800565b005b3480156106b557600080fd5b506106d060048036038101906106cb9190613ba0565b611816565b005b3480156106de57600080fd5b506106f960048036038101906106f491906134c8565b611867565b6040516107069190613470565b60405180910390f35b34801561071b57600080fd5b50610724611930565b60405161073191906135f9565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c9190613c23565b611936565b60405161076e91906133bc565b60405180910390f35b34801561078357600080fd5b5061079e600480360381019061079991906135bd565b6119ca565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610813575061081282611a33565b5b9050919050565b60606000805461082990613c92565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613c92565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050505050905090565b60006108b782611b15565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108fd826113e4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490613d35565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661098c611b60565b73ffffffffffffffffffffffffffffffffffffffff1614806109bb57506109ba816109b5611b60565b611936565b5b6109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190613dc7565b60405180910390fd5b610a048383611b68565b505050565b806000610a168282611c21565b610a1e611cd3565b610a26611d22565b60006001610a32610b61565b610a3c9190613e16565b9050600081905060005b85811015610a7957610a583384611db6565b8280610a6390613e6c565b9350508080610a7190613e6c565b915050610a46565b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16827f4670f4a83676ba0dc234421c5132fe57987227456704e81b079bf823699e111c88604051610ad891906135f9565b60405180910390a45050610aea611fd3565b505050565b610af7611d22565b80601160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600880549050905090565b601160019054906101000a900460ff1681565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bbf57610bbe33611fdd565b5b610bca8484846120da565b50505050565b838382600f604051602001610be59190613f53565b604051602081830303815290604052805190602001208383604051602001610c0e929190613f8f565b6040516020818303038152906040528051906020012014610c5b576040517f76d4e1e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600042905060018203610cb65780600b6000848152602001908152602001600020541115610cb5576040517fcb45d4ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b60008203610d0c5780600b6000848152602001908152602001600020541115610d0b576040517fcb45d4ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600186610d198282611c21565b610d21611cd3565b6000889050610d303382611db6565b610d5c601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff163461213a565b3373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16827f4670f4a83676ba0dc234421c5132fe57987227456704e81b079bf823699e111c6001604051610dbb9190613fe3565b60405180910390a450610dcc611fd3565b50505050505050505050565b610de0611d22565b6000828290509050808585905014610e24576040517faffd2c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610ff3576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663e4aecb5430888885818110610e6d57610e6c613ffe565b5b9050602002016020810190610e8291906135bd565b6040518363ffffffff1660e01b8152600401610e9f92919061402d565b6020604051808303816000875af1158015610ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee2919061406b565b1515848483818110610ef757610ef6613ffe565b5b9050602002016020810190610f0c9190613899565b151503610fe0576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a2f367ab30888885818110610f5157610f50613ffe565b5b9050602002016020810190610f6691906135bd565b878786818110610f7957610f78613ffe565b5b9050602002016020810190610f8e9190613899565b156040518463ffffffff1660e01b8152600401610fad93929190614098565b600060405180830381600087803b158015610fc757600080fd5b505af1158015610fdb573d6000803e3d6000fd5b505050505b8080610feb90613e6c565b915050610e27565b505050505050565b6000611006836114f8565b8210611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90614141565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6110a8611d22565b80601160016101000a81548160ff02191690831515021790555050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111155761111433611fdd565b5b611120848484612184565b50505050565b838382600f60405160200161113b9190613f53565b604051602081830303815290604052805190602001208383604051602001611164929190613f8f565b60405160208183030381529060405280519060200120146111b1576040517f76d4e1e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004290506001820361120c5780600b600084815260200190815260200160002054111561120b576040517fcb45d4ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600082036112625780600b6000848152602001908152602001600020541115611261576040517fcb45d4ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b85600061126f8282611c21565b611277611cd3565b60006001611283610b61565b61128d9190613e16565b9050600081905060005b8a8110156112ca576112a93384611db6565b82806112b490613e6c565b93505080806112c290613e6c565b915050611297565b506112f7601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff163461213a565b3373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16827f4670f4a83676ba0dc234421c5132fe57987227456704e81b079bf823699e111c8d60405161135591906135f9565b60405180910390a45050611367611fd3565b50505050505050505050565b600061137d610b61565b82106113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b5906141d3565b60405180910390fd5b600882815481106113d2576113d1613ffe565b5b90600052602060002001549050919050565b6000806113f0836121a4565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114589061423f565b60405180910390fd5b80915050919050565b6010805461147790613c92565b80601f01602080910402602001604051908101604052809291908181526020018280546114a390613c92565b80156114f05780601f106114c5576101008083540402835291602001916114f0565b820191906000526020600020905b8154815290600101906020018083116114d357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f906142d1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115b7611d22565b6000600e5490506000811461160357806040517ffc1b84ac0000000000000000000000000000000000000000000000000000000081526004016115fa91906135f9565b60405180910390fd5b8282600f9190611614929190613265565b506001600e81905550505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611650611d22565b60011515601160019054906101000a900460ff1615150361169d576040517faffd2c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001601160006101000a81548160ff0219169083151502179055508181601091906116c9929190613265565b505050565b6060600180546116dd90613c92565b80601f016020809104026020016040519081016040528092919081815260200182805461170990613c92565b80156117565780601f1061172b57610100808354040283529160200191611756565b820191906000526020600020905b81548152906001019060200180831161173957829003601f168201915b5050505050905090565b611768611d22565b600082829050905060028111156117ab576040517faffd2c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156117fa578383828181106117c9576117c8613ffe565b5b90506020020135600b60008381526020019081526020016000208190555080806117f290613e6c565b9150506117ae565b50505050565b61181261180b611b60565b83836121e1565b5050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146118545761185333611fdd565b5b6118608585858561234d565b5050505050565b606060001515611876836123af565b1515036118ba57816040517fb1b66a6b0000000000000000000000000000000000000000000000000000000081526004016118b191906135f9565b60405180910390fd5b60001515601160009054906101000a900460ff161515036118fd5760106040516020016118e79190613f53565b604051602081830303815290604052905061192b565b6010611908836123f0565b60405160200161191992919061436e565b60405160208183030381529060405290505b919050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119d2611d22565b6000600d54905060008114611a1e57806040517ffc1b84ac000000000000000000000000000000000000000000000000000000008152600401611a1591906135f9565b60405180910390fd5b611a27826124be565b6001600d819055505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611afe57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b0e5750611b0d82612584565b5b9050919050565b611b1e816123af565b611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b549061423f565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bdb836113e4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000600183611c2e610b61565b611c389190613e16565b611c429190613e16565b905060006001600c54611c559190613e16565b905080821115611c91576040517fcb45d4ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c54831115611ccd576040517fcb45d4ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6002600a5403611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f906143e9565b60405180910390fd5b6002600a81905550565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611db457336040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152600401611dab9190613536565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614455565b60405180910390fd5b611e2e816123af565b15611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e65906144c1565b60405180910390fd5b611e7c6000838360016125ee565b611e85816123af565b15611ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc906144c1565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611fcf60008383600161274c565b5050565b6001600a81905550565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156120d7576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b815260040161205492919061402d565b602060405180830381865afa158015612071573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612095919061406b565b6120d657806040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016120cd9190613536565b60405180910390fd5b5b50565b6120eb6120e5611b60565b82612752565b61212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190614553565b60405180910390fd5b6121358383836127e7565b505050565b600080600080600085875af190508061217f576040517f89a360eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b61219f83838360405180602001604052806000815250611816565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361224f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612246906145bf565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161234091906133bc565b60405180910390a3505050565b61235e612358611b60565b83612752565b61239d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239490614553565b60405180910390fd5b6123a984848484612ae0565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166123d1836121a4565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600060016123ff84612b3c565b01905060008167ffffffffffffffff81111561241e5761241d613a75565b5b6040519080825280601f01601f1916602001820160405280156124505781602001600182028036833780820191505090505b509050600082602001820190505b6001156124b3578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816124a7576124a66145df565b5b0494506000850361245e575b819350505050919050565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6125fa84848484612c8f565b600181111561263e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263590614680565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036126855761268081612db5565b6126c4565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146126c3576126c28582612dfe565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036127065761270181612f6b565b612745565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461274457612743848261303c565b5b5b5050505050565b50505050565b60008061275e836113e4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127a0575061279f8185611936565b5b806127de57508373ffffffffffffffffffffffffffffffffffffffff166127c6846108ac565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612807826113e4565b73ffffffffffffffffffffffffffffffffffffffff161461285d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285490614712565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c3906147a4565b60405180910390fd5b6128d983838360016125ee565b8273ffffffffffffffffffffffffffffffffffffffff166128f9826113e4565b73ffffffffffffffffffffffffffffffffffffffff161461294f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294690614712565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612adb838383600161274c565b505050565b612aeb8484846127e7565b612af7848484846130bb565b612b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2d90614836565b60405180910390fd5b50505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612b9a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612b9057612b8f6145df565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612bd7576d04ee2d6d415b85acef81000000008381612bcd57612bcc6145df565b5b0492506020810190505b662386f26fc100008310612c0657662386f26fc100008381612bfc57612bfb6145df565b5b0492506010810190505b6305f5e1008310612c2f576305f5e1008381612c2557612c246145df565b5b0492506008810190505b6127108310612c54576127108381612c4a57612c496145df565b5b0492506004810190505b60648310612c775760648381612c6d57612c6c6145df565b5b0492506002810190505b600a8310612c86576001810190505b80915050919050565b6001811115612daf57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612d235780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d1b9190614856565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612dae5780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612da69190613e16565b925050819055505b5b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e0b846114f8565b612e159190614856565b9050600060076000848152602001908152602001600020549050818114612efa576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f7f9190614856565b9050600060096000848152602001908152602001600020549050600060088381548110612faf57612fae613ffe565b5b906000526020600020015490508060088381548110612fd157612fd0613ffe565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130205761301f61488a565b5b6001900381819060005260206000200160009055905550505050565b6000613047836114f8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60006130dc8473ffffffffffffffffffffffffffffffffffffffff16613242565b15613235578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613105611b60565b8786866040518563ffffffff1660e01b8152600401613127949392919061490e565b6020604051808303816000875af192505050801561316357506040513d601f19601f82011682018060405250810190613160919061496f565b60015b6131e5573d8060008114613193576040519150601f19603f3d011682016040523d82523d6000602084013e613198565b606091505b5060008151036131dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d490614836565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061323a565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461327190613c92565b90600052602060002090601f01602090048101928261329357600085556132da565b82601f106132ac57803560ff19168380011785556132da565b828001600101855582156132da579182015b828111156132d95782358255916020019190600101906132be565b5b5090506132e791906132eb565b5090565b5b808211156133045760008160009055506001016132ec565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133518161331c565b811461335c57600080fd5b50565b60008135905061336e81613348565b92915050565b60006020828403121561338a57613389613312565b5b60006133988482850161335f565b91505092915050565b60008115159050919050565b6133b6816133a1565b82525050565b60006020820190506133d160008301846133ad565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134115780820151818401526020810190506133f6565b83811115613420576000848401525b50505050565b6000601f19601f8301169050919050565b6000613442826133d7565b61344c81856133e2565b935061345c8185602086016133f3565b61346581613426565b840191505092915050565b6000602082019050818103600083015261348a8184613437565b905092915050565b6000819050919050565b6134a581613492565b81146134b057600080fd5b50565b6000813590506134c28161349c565b92915050565b6000602082840312156134de576134dd613312565b5b60006134ec848285016134b3565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613520826134f5565b9050919050565b61353081613515565b82525050565b600060208201905061354b6000830184613527565b92915050565b61355a81613515565b811461356557600080fd5b50565b60008135905061357781613551565b92915050565b6000806040838503121561359457613593613312565b5b60006135a285828601613568565b92505060206135b3858286016134b3565b9150509250929050565b6000602082840312156135d3576135d2613312565b5b60006135e184828501613568565b91505092915050565b6135f381613492565b82525050565b600060208201905061360e60008301846135ea565b92915050565b60008060006060848603121561362d5761362c613312565b5b600061363b86828701613568565b935050602061364c86828701613568565b925050604061365d868287016134b3565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f84011261368c5761368b613667565b5b8235905067ffffffffffffffff8111156136a9576136a861366c565b5b6020830191508360018202830111156136c5576136c4613671565b5b9250929050565b600080600080606085870312156136e6576136e5613312565b5b600085013567ffffffffffffffff81111561370457613703613317565b5b61371087828801613676565b94509450506020613723878288016134b3565b9250506040613734878288016134b3565b91505092959194509250565b60008083601f84011261375657613755613667565b5b8235905067ffffffffffffffff8111156137735761377261366c565b5b60208301915083602082028301111561378f5761378e613671565b5b9250929050565b60008083601f8401126137ac576137ab613667565b5b8235905067ffffffffffffffff8111156137c9576137c861366c565b5b6020830191508360208202830111156137e5576137e4613671565b5b9250929050565b6000806000806040858703121561380657613805613312565b5b600085013567ffffffffffffffff81111561382457613823613317565b5b61383087828801613740565b9450945050602085013567ffffffffffffffff81111561385357613852613317565b5b61385f87828801613796565b925092505092959194509250565b613876816133a1565b811461388157600080fd5b50565b6000813590506138938161386d565b92915050565b6000602082840312156138af576138ae613312565b5b60006138bd84828501613884565b91505092915050565b6000819050919050565b60006138eb6138e66138e1846134f5565b6138c6565b6134f5565b9050919050565b60006138fd826138d0565b9050919050565b600061390f826138f2565b9050919050565b61391f81613904565b82525050565b600060208201905061393a6000830184613916565b92915050565b6000806020838503121561395757613956613312565b5b600083013567ffffffffffffffff81111561397557613974613317565b5b61398185828601613676565b92509250509250929050565b60008083601f8401126139a3576139a2613667565b5b8235905067ffffffffffffffff8111156139c0576139bf61366c565b5b6020830191508360208202830111156139dc576139db613671565b5b9250929050565b600080602083850312156139fa576139f9613312565b5b600083013567ffffffffffffffff811115613a1857613a17613317565b5b613a248582860161398d565b92509250509250929050565b60008060408385031215613a4757613a46613312565b5b6000613a5585828601613568565b9250506020613a6685828601613884565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613aad82613426565b810181811067ffffffffffffffff82111715613acc57613acb613a75565b5b80604052505050565b6000613adf613308565b9050613aeb8282613aa4565b919050565b600067ffffffffffffffff821115613b0b57613b0a613a75565b5b613b1482613426565b9050602081019050919050565b82818337600083830152505050565b6000613b43613b3e84613af0565b613ad5565b905082815260208101848484011115613b5f57613b5e613a70565b5b613b6a848285613b21565b509392505050565b600082601f830112613b8757613b86613667565b5b8135613b97848260208601613b30565b91505092915050565b60008060008060808587031215613bba57613bb9613312565b5b6000613bc887828801613568565b9450506020613bd987828801613568565b9350506040613bea878288016134b3565b925050606085013567ffffffffffffffff811115613c0b57613c0a613317565b5b613c1787828801613b72565b91505092959194509250565b60008060408385031215613c3a57613c39613312565b5b6000613c4885828601613568565b9250506020613c5985828601613568565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613caa57607f821691505b602082108103613cbd57613cbc613c63565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d1f6021836133e2565b9150613d2a82613cc3565b604082019050919050565b60006020820190508181036000830152613d4e81613d12565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613db1603d836133e2565b9150613dbc82613d55565b604082019050919050565b60006020820190508181036000830152613de081613da4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e2182613492565b9150613e2c83613492565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e6157613e60613de7565b5b828201905092915050565b6000613e7782613492565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ea957613ea8613de7565b5b600182019050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613ee181613c92565b613eeb8186613eb4565b94506001821660008114613f065760018114613f1757613f4a565b60ff19831686528186019350613f4a565b613f2085613ebf565b60005b83811015613f4257815481890152600182019150602081019050613f23565b838801955050505b50505092915050565b6000613f5f8284613ed4565b915081905092915050565b6000613f768385613eb4565b9350613f83838584613b21565b82840190509392505050565b6000613f9c828486613f6a565b91508190509392505050565b6000819050919050565b6000613fcd613fc8613fc384613fa8565b6138c6565b613492565b9050919050565b613fdd81613fb2565b82525050565b6000602082019050613ff86000830184613fd4565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006040820190506140426000830185613527565b61404f6020830184613527565b9392505050565b6000815190506140658161386d565b92915050565b60006020828403121561408157614080613312565b5b600061408f84828501614056565b91505092915050565b60006060820190506140ad6000830186613527565b6140ba6020830185613527565b6140c760408301846133ad565b949350505050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061412b602b836133e2565b9150614136826140cf565b604082019050919050565b6000602082019050818103600083015261415a8161411e565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006141bd602c836133e2565b91506141c882614161565b604082019050919050565b600060208201905081810360008301526141ec816141b0565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006142296018836133e2565b9150614234826141f3565b602082019050919050565b600060208201905081810360008301526142588161421c565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006142bb6029836133e2565b91506142c68261425f565b604082019050919050565b600060208201905081810360008301526142ea816142ae565b9050919050565b60006142fc826133d7565b6143068185613eb4565b93506143168185602086016133f3565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614358600583613eb4565b915061436382614322565b600582019050919050565b600061437a8285613ed4565b915061438682846142f1565b91506143918261434b565b91508190509392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006143d3601f836133e2565b91506143de8261439d565b602082019050919050565b60006020820190508181036000830152614402816143c6565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061443f6020836133e2565b915061444a82614409565b602082019050919050565b6000602082019050818103600083015261446e81614432565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006144ab601c836133e2565b91506144b682614475565b602082019050919050565b600060208201905081810360008301526144da8161449e565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b600061453d602d836133e2565b9150614548826144e1565b604082019050919050565b6000602082019050818103600083015261456c81614530565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006145a96019836133e2565b91506145b482614573565b602082019050919050565b600060208201905081810360008301526145d88161459c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b600061466a6035836133e2565b91506146758261460e565b604082019050919050565b600060208201905081810360008301526146998161465d565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006146fc6025836133e2565b9150614707826146a0565b604082019050919050565b6000602082019050818103600083015261472b816146ef565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061478e6024836133e2565b915061479982614732565b604082019050919050565b600060208201905081810360008301526147bd81614781565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006148206032836133e2565b915061482b826147c4565b604082019050919050565b6000602082019050818103600083015261484f81614813565b9050919050565b600061486182613492565b915061486c83613492565b92508282101561487f5761487e613de7565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006148e0826148b9565b6148ea81856148c4565b93506148fa8185602086016133f3565b61490381613426565b840191505092915050565b60006080820190506149236000830187613527565b6149306020830186613527565b61493d60408301856135ea565b818103606083015261494f81846148d5565b905095945050505050565b60008151905061496981613348565b92915050565b60006020828403121561498557614984613312565b5b60006149938482850161495a565b9150509291505056fea26469706673582212200e070d0ddaae9a5bf9e631e442594f53bffe915c135c3ec84e9ef3227dbd07b664736f6c634300080d003368747470733a2f2f6d6f6e746167652e696e667572612d697066732e696f2f697066732f516d50615948374d56566f5547487a4638794b3147703669734271715a70724d556f456a70455158766e36586b38a2646970667358221220d2e0bc06b98fb41aded6ab527e5279d60046b1f172a08e19902b6a2dbf99cc6864736f6c634300080d0033