US5815651A - Method and apparatus for CPU failure recovery in symmetric multi-processing systems - Google Patents
Method and apparatus for CPU failure recovery in symmetric multi-processing systems Download PDFInfo
- Publication number
- US5815651A US5815651A US08/711,386 US71138696A US5815651A US 5815651 A US5815651 A US 5815651A US 71138696 A US71138696 A US 71138696A US 5815651 A US5815651 A US 5815651A
- Authority
- US
- United States
- Prior art keywords
- data processing
- processing means
- means
- failed
- cpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
- 238000000034 methods Methods 0 abstract claims description 103
- 230000004044 response Effects 0 abstract claims description 15
- 230000015654 memory Effects 0 claims description 65
- 230000003578 releasing Effects 0 claims description 9
- 230000001276 controlling effects Effects 0 claims 4
- 230000000875 corresponding Effects 0 description 5
- FZYQHMHIALEGMG-MVOHYUIRSA-N PCBB Chemical compound data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pgo8c3ZnIHZlcnNpb249JzEuMScgYmFzZVByb2ZpbGU9J2Z1bGwnCiAgICAgICAgICAgICAgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJwogICAgICAgICAgICAgICAgICAgICAgeG1sbnM6cmRraXQ9J2h0dHA6Ly93d3cucmRraXQub3JnL3htbCcKICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJwogICAgICAgICAgICAgICAgICB4bWw6c3BhY2U9J3ByZXNlcnZlJwp3aWR0aD0nMzAwcHgnIGhlaWdodD0nMzAwcHgnID4KPCEtLSBFTkQgT0YgSEVBREVSIC0tPgo8cmVjdCBzdHlsZT0nb3BhY2l0eToxLjA7ZmlsbDojRkZGRkZGO3N0cm9rZTpub25lJyB3aWR0aD0nMzAwJyBoZWlnaHQ9JzMwMCcgeD0nMCcgeT0nMCc+IDwvcmVjdD4KPHBhdGggY2xhc3M9J2JvbmQtMCcgZD0nTSAxMTYuMDcsMjQwLjMxNSAxMzcuOTgyLDIzOS4xNzEnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xJyBkPSdNIDEzNy45ODIsMjM5LjE3MSAxNDcuOTQ3LDIxOS42MjQnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0yJyBkPSdNIDE0Ny45NDcsMjE5LjYyNCAxNjkuODU4LDIxOC40ODEnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0zJyBkPSdNIDE2OS44NTgsMjE4LjQ4MSAxNzMuOTA5LDIxMC41MzUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0zJyBkPSdNIDE3My45MDksMjEwLjUzNSAxNzcuOTU5LDIwMi41OScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I0ZGMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTQnIGQ9J00gMTgzLjIzOSwxOTguNzU1IDE5Mi40ODcsMTk4LjI3Micgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I0ZGMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTQnIGQ9J00gMTkyLjQ4NywxOTguMjcyIDIwMS43MzQsMTk3Ljc5JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNScgZD0nTSAxOTkuODk0LDE5OC45ODQgMjA0LjY4LDIwNi4zNTgnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01JyBkPSdNIDIwNC42OCwyMDYuMzU4IDIwOS40NjYsMjEzLjczMScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I0ZGMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTUnIGQ9J00gMjAzLjU3NSwxOTYuNTk1IDIwOC4zNjEsMjAzLjk2OScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTUnIGQ9J00gMjA4LjM2MSwyMDMuOTY5IDIxMy4xNDcsMjExLjM0Micgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I0ZGMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTYnIGQ9J00gMjAxLjczNCwxOTcuNzkgMjExLjcsMTc4LjI0Micgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTcnIGQ9J00gMjExLjcsMTc4LjI0MiAxOTkuNzU0LDE1OS44MzgnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC04JyBkPSdNIDE5OS43NTQsMTU5LjgzOCAyMDkuNzE5LDE0MC4yOTEnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC05JyBkPSdNIDIwOS43MTksMTQwLjI5MSAxOTcuNzczLDEyMS44ODcnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xMCcgZD0nTSAyMTIuMDY4LDEwOC4yNjMgMjEyLjM2OCwxMDguNTg0JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTAnIGQ9J00gMjEwLjMxNCwxMDkuNTk4IDIxMC45MTIsMTEwLjI0JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTAnIGQ9J00gMjA4LjU1OSwxMTAuOTM0IDIwOS40NTcsMTExLjg5Nycgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTEwJyBkPSdNIDIwNi44MDUsMTEyLjI2OSAyMDguMDAyLDExMy41NTMnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xMCcgZD0nTSAyMDUuMDUsMTEzLjYwNSAyMDYuNTQ2LDExNS4yMScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTEwJyBkPSdNIDIwMy4yOTYsMTE0Ljk0IDIwNS4wOTEsMTE2Ljg2Nicgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTEwJyBkPSdNIDIwMS41NDEsMTE2LjI3NiAyMDMuNjM1LDExOC41MjMnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xMCcgZD0nTSAxOTkuNzg2LDExNy42MTEgMjAyLjE4LDEyMC4xNzknIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xMCcgZD0nTSAxOTguMDMyLDExOC45NDcgMjAwLjcyNSwxMjEuODM2JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTAnIGQ9J00gMTk2LjI3NywxMjAuMjgyIDE5OS4yNjksMTIzLjQ5Micgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTUwJyBkPSdNIDE5Ny43NzMsMTIxLjg4NyAxNzcuNTc1LDEzMC40NTYnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01NicgZD0nTSAxOTMuMTIyLDEwMi42OTUgMTkzLjU0OSwxMDIuNTk2JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTYnIGQ9J00gMTkzLjQwMSwxMDQuODgyIDE5NC4yNTYsMTA0LjY4NScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTU2JyBkPSdNIDE5My42OCwxMDcuMDY5IDE5NC45NjMsMTA2Ljc3NCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTU2JyBkPSdNIDE5My45NTksMTA5LjI1NyAxOTUuNjcsMTA4Ljg2Micgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTU2JyBkPSdNIDE5NC4yMzksMTExLjQ0NCAxOTYuMzc3LDExMC45NTEnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01NicgZD0nTSAxOTQuNTE4LDExMy42MzEgMTk3LjA4NCwxMTMuMDQnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01NicgZD0nTSAxOTQuNzk3LDExNS44MTkgMTk3Ljc5LDExNS4xMjgnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01NicgZD0nTSAxOTUuMDc3LDExOC4wMDYgMTk4LjQ5NywxMTcuMjE3JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTYnIGQ9J00gMTk1LjM1NiwxMjAuMTkzIDE5OS4yMDQsMTE5LjMwNicgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTU2JyBkPSdNIDE5NS42MzUsMTIyLjM4IDE5OS45MTEsMTIxLjM5NCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTExJyBkPSdNIDIxMy44MjMsMTA2LjkyNyAyMjkuODczLDkxLjk2NjknIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01OScgZD0nTSAyMTMuODIzLDEwNi45MjcgMjIzLjA5MSwxMjYuODE0JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNjEnIGQ9J00gMjEzLjgyMywxMDYuOTI3IDE5Mi44NDIsMTAwLjUwOCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTEyJyBkPSdNIDIyOS44NzMsOTEuOTY2OSAyNDkuMDYxLDEwMi42MDgnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xMicgZD0nTSAyMzAuNjIzLDk3LjQwMDcgMjQ0LjA1NCwxMDQuODUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC02MycgZD0nTSAyMjkuODczLDkxLjk2NjkgMjI0Ljk0Miw3MC41ODcyJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTMnIGQ9J00gMjQ5LjA2MSwxMDIuNjA4IDI2OS44MDgsOTUuNDY5Nicgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTY1JyBkPSdNIDI0OS4wNjEsMTAyLjYwOCAyNDQuODY5LDEyNC4xNDUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xNCcgZD0nTSAyNjkuODA4LDk1LjQ2OTYgMjg2LjM2NCwxMDkuODY4JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTQnIGQ9J00gMjY5LjQxMSwxMDAuOTQgMjgxLjAwMSwxMTEuMDE5JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTUnIGQ9J00gMjg2LjM2NCwxMDkuODY4IDI4Mi4xNzIsMTMxLjQwNScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTE2JyBkPSdNIDI4Mi4xNzIsMTMxLjQwNSAyMi45MDQ3LDE2My4xODEnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xNicgZD0nTSAyNDMuODE2LDE0MC41MjcgNjIuMzI4NiwxNjIuNzcnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC02NycgZD0nTSAyODIuMTcyLDEzMS40MDUgMjYxLjQyNSwxMzguNTQzJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTcnIGQ9J00gMjIuOTA0NywxNjMuMTgxIDEzLjYzNjQsMTQzLjI5NCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTY4JyBkPSdNIDIyLjkwNDcsMTYzLjE4MSA0NC43NjE3LDE2NS4wOTgnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xOCcgZD0nTSAxMy42MzY0LDE0My4yOTQgMjYuMjI1MSwxMjUuMzI0JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTgnIGQ9J00gMTkuMTE4NywxNDMuMTE2IDI3LjkzMDgsMTMwLjUzNycgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTE5JyBkPSdNIDI2LjIyNTEsMTI1LjMyNCA0OC4wODIyLDEyNy4yNDEnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0yMCcgZD0nTSA0OC4wODIyLDEyNy4yNDEgNjQuMTMyLDExMi4yODEnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0yMCcgZD0nTSA1My40ODE3LDEyOC4yMDcgNjQuNzE2NiwxMTcuNzM1JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNjknIGQ9J00gNDguMDgyMiwxMjcuMjQxIDU3LjM1MDQsMTQ3LjEyOCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTIxJyBkPSdNIDY0LjEzMiwxMTIuMjgxIDYzLjc1MzksOTAuMzQyOCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTcwJyBkPSdNIDY0LjEzMiwxMTIuMjgxIDgzLjMxOTcsMTIyLjkyMicgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTIyJyBkPSdNIDYzLjc1MzksOTAuMzQyOCA4Mi41NjM0LDc5LjA0NjUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0yMicgZD0nTSA2OC44MzQ2LDkyLjQxMDMgODIuMDAxMyw4NC41MDI5JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMjMnIGQ9J00gODIuNTYzNCw3OS4wNDY1IDEwMS43NTEsODkuNjg3OScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTI0JyBkPSdNIDEwMS43NTEsODkuNjg3OSAxMjIuNDk4LDgyLjU0OTInIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC03MScgZD0nTSAxMDEuNzUxLDg5LjY4NzkgMTAyLjEyOSwxMTEuNjI2JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNzEnIGQ9J00gOTcuNDIwMyw5My4wNTQyIDk3LjY4NSwxMDguNDExJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMjUnIGQ9J00gMTIyLjQ5OCw4Mi41NDkyIDEzMS4wNzYsNjIuMzU0Mycgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTcyJyBkPSdNIDEyMi40OTgsODIuNTQ5MiAxMzUuNjk5LDEwMC4wNzUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC03MicgZD0nTSAxMjAuOTczLDg3LjgxODEgMTMwLjIxNCwxMDAuMDg2JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMjYnIGQ9J00gMTMxLjA3Niw2Mi4zNTQzIDE1Mi44NTQsNTkuNjg1MScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTI2JyBkPSdNIDEzNC44NzYsNjYuMzA5NSAxNTAuMTIxLDY0LjQ0MTEnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0yNycgZD0nTSAxNTIuODU0LDU5LjY4NTEgMTY2LjA1NCw3Ny4yMTA4JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMjgnIGQ9J00gMTY2LjA1NCw3Ny4yMTA4IDE4Ny45MTEsNzkuMTI3OScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTI4JyBkPSdNIDE2OC45NDksODEuODY5OCAxODQuMjQ5LDgzLjIxMTgnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC03MycgZD0nTSAxNjYuMDU0LDc3LjIxMDggMTU3LjQ3Nyw5Ny40MDU3JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMjknIGQ9J00gMTg3LjkxMSw3OS4xMjc5IDIwMy45NjEsNjQuMTY3Nycgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTMxJyBkPSdNIDE4Ny45MTEsNzkuMTI3OSAxOTIuODQyLDEwMC41MDgnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0zMCcgZD0nTSAyMDMuOTYxLDY0LjE2NzcgMjI0Ljk0Miw3MC41ODcyJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMzAnIGQ9J00gMjA1LjgyNCw2OS4zMjY4IDIyMC41MTEsNzMuODIwNScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTMyJyBkPSdNIDE5Mi44NDIsMTAwLjUwOCAxNzQuMDMzLDExMS44MDQnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0zMycgZD0nTSAxNzQuMDMzLDExMS44MDQgMTk1LjE3MywxNTUuNTgzJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTcnIGQ9J00gMTc0LjAzMywxMTEuODA0IDE1Ny40NzcsOTcuNDA1Nycgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTU3JyBkPSdNIDE2OC42NywxMTIuOTU1IDE1Ny4wODEsMTAyLjg3Nycgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTM0JyBkPSdNIDE5NS4xNzMsMTU1LjU4MyAyMTUuNTM3LDE0Ny40MTQnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0zNCcgZD0nTSAxOTYuNTk0LDE1MC4yODUgMjEwLjg0OCwxNDQuNTY3JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNjInIGQ9J00gMTk1LjE3MywxNTUuNTgzIDE5Ni42NSwxNzcuNDc0JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMzUnIGQ9J00gMjE1LjUzNywxNDcuNDE0IDIyMy4wOTEsMTI2LjgxNCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTY0JyBkPSdNIDIxNS41MzcsMTQ3LjQxNCAyMjkuNTk5LDE2NC4yNTYnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0zNicgZD0nTSAyMjMuMDkxLDEyNi44MTQgMjQ0Ljg2OSwxMjQuMTQ1JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMzYnIGQ9J00gMjI2Ljg5MiwxMzAuNzcgMjQyLjEzNiwxMjguOTAxJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMzcnIGQ9J00gMjQ0Ljg2OSwxMjQuMTQ1IDI2MS40MjUsMTM4LjU0Mycgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTM4JyBkPSdNIDI2MS40MjUsMTM4LjU0MyAyNDUuMzc1LDE1My41MDQnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0zOCcgZD0nTSAyNTYuMDI2LDEzNy41NzcgMjQ0Ljc5MSwxNDguMDUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0zOScgZD0nTSAyNDUuMzc1LDE1My41MDQgNDQuNzYxNywxNjUuMDk4JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNjAnIGQ9J00gMjQ1LjM3NSwxNTMuNTA0IDIyOS41OTksMTY0LjI1Nicgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTQwJyBkPSdNIDQ0Ljc2MTcsMTY1LjA5OCA1Ny4zNTA0LDE0Ny4xMjgnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC00MCcgZD0nTSA1MC4yNDQxLDE2NC45MiA1OS4wNTYyLDE1Mi4zNDEnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC00MScgZD0nTSA1Ny4zNTA0LDE0Ny4xMjggNzkuMTI4NCwxNDQuNDU5JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNDInIGQ9J00gNzkuMTI4NCwxNDQuNDU5IDgzLjMxOTcsMTIyLjkyMicgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTQyJyBkPSdNIDc1LjQ0OTcsMTQwLjM5IDc4LjM4MzYsMTI1LjMxNCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTY2JyBkPSdNIDc5LjEyODQsMTQ0LjQ1OSAyMTcuOTI3LDE4Mi44MzQnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC00MycgZD0nTSA4My4zMTk3LDEyMi45MjIgMTAyLjEyOSwxMTEuNjI2JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNDQnIGQ9J00gMTAyLjEyOSwxMTEuNjI2IDEyMy4xMSwxMTguMDQ1JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNDUnIGQ9J00gMTIzLjExLDExOC4wNDUgMTk2LjY1LDE3Ny40NzQnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC00NScgZD0nTSAxMzEuMzgzLDEzMC4zNzMgMTgyLjg2MSwxNzEuOTczJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNDgnIGQ9J00gMTIzLjExLDExOC4wNDUgMTM1LjY5OSwxMDAuMDc1JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNDYnIGQ9J00gMTk2LjY1LDE3Ny40NzQgMjE3LjkyNywxODIuODM0JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNDcnIGQ9J00gMjE3LjkyNywxODIuODM0IDIyOS41OTksMTY0LjI1Nicgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTQ3JyBkPSdNIDIxNS45NjIsMTc3LjcxMyAyMjQuMTMyLDE2NC43MDgnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC00OScgZD0nTSAxMzUuNjk5LDEwMC4wNzUgMTU3LjQ3Nyw5Ny40MDU3JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTEnIGQ9J00gMTc3LjU3NSwxMzAuNDU2IDE2MC4wNTUsMTE3LjI0OCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTUxJyBkPSdNIDE3Mi4zMDUsMTMxLjk3OSAxNjAuMDQxLDEyMi43MzMnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01OCcgZD0nTSAxNzcuNTc1LDEzMC40NTYgMTc0Ljg5NiwxNTIuMjMzJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTInIGQ9J00gMTYwLjA1NSwxMTcuMjQ4IDEzOS44NTYsMTI1LjgxNicgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTUzJyBkPSdNIDEzOS44NTYsMTI1LjgxNiAxMzcuMTc3LDE0Ny41OTMnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01MycgZD0nTSAxNDMuODEsMTI5LjYxOCAxNDEuOTM0LDE0NC44NjInIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01NCcgZD0nTSAxMzcuMTc3LDE0Ny41OTMgMTU0LjY5NywxNjAuODAxJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTUnIGQ9J00gMTU0LjY5NywxNjAuODAxIDE3NC44OTYsMTUyLjIzMycgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTU1JyBkPSdNIDE1Ni4wMTMsMTU1LjQ3NiAxNzAuMTUyLDE0OS40NzgnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8dGV4dCB4PScxNzYuNDA4JyB5PScyMDIuNTknIHN0eWxlPSdmb250LXNpemU6N3B4O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtmb250LWZhbWlseTpzYW5zLXNlcmlmO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6I0ZGMDAwMCcgPjx0c3Bhbj5PPC90c3Bhbj48L3RleHQ+Cjx0ZXh0IHg9JzIxMC4yNjUnIHk9JzIxOS44NScgc3R5bGU9J2ZvbnQtc2l6ZTo3cHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7dGV4dC1hbmNob3I6c3RhcnQ7ZmlsbDojRkYwMDAwJyA+PHRzcGFuPk88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg== data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pgo8c3ZnIHZlcnNpb249JzEuMScgYmFzZVByb2ZpbGU9J2Z1bGwnCiAgICAgICAgICAgICAgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJwogICAgICAgICAgICAgICAgICAgICAgeG1sbnM6cmRraXQ9J2h0dHA6Ly93d3cucmRraXQub3JnL3htbCcKICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJwogICAgICAgICAgICAgICAgICB4bWw6c3BhY2U9J3ByZXNlcnZlJwp3aWR0aD0nODVweCcgaGVpZ2h0PSc4NXB4JyA+CjwhLS0gRU5EIE9GIEhFQURFUiAtLT4KPHJlY3Qgc3R5bGU9J29wYWNpdHk6MS4wO2ZpbGw6I0ZGRkZGRjtzdHJva2U6bm9uZScgd2lkdGg9Jzg1JyBoZWlnaHQ9Jzg1JyB4PScwJyB5PScwJz4gPC9yZWN0Pgo8cGF0aCBjbGFzcz0nYm9uZC0wJyBkPSdNIDMyLjM4NjYsNjcuNTg5MiAzOC41OTQ4LDY3LjI2NTInIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xJyBkPSdNIDM4LjU5NDgsNjcuMjY1MiA0MS40MTgzLDYxLjcyNjgnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0yJyBkPSdNIDQxLjQxODMsNjEuNzI2OCA0Ny42MjY0LDYxLjQwMjgnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0zJyBkPSdNIDQ3LjYyNjQsNjEuNDAyOCA0OC43NzQxLDU5LjE1MTcnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0zJyBkPSdNIDQ4Ljc3NDEsNTkuMTUxNyA0OS45MjE3LDU2LjkwMDUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNGRjAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC00JyBkPSdNIDUxLjQxNzYsNTUuODEzOSA1NC4wMzc4LDU1LjY3NzInIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNGRjAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC00JyBkPSdNIDU0LjAzNzgsNTUuNjc3MiA1Ni42NTgxLDU1LjU0MDQnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01JyBkPSdNIDU2LjEzNjYsNTUuODc4OSA1Ny40OTI3LDU3Ljk2OCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTUnIGQ9J00gNTcuNDkyNyw1Ny45NjggNTguODQ4OCw2MC4wNTcyJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojRkYwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNScgZD0nTSA1Ny4xNzk1LDU1LjIwMTkgNTguNTM1Niw1Ny4yOTExJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNScgZD0nTSA1OC41MzU2LDU3LjI5MTEgNTkuODkxNyw1OS4zODAzJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojRkYwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNicgZD0nTSA1Ni42NTgxLDU1LjU0MDQgNTkuNDgxNiw1MC4wMDInIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC03JyBkPSdNIDU5LjQ4MTYsNTAuMDAyIDU2LjA5NjksNDQuNzg3Nicgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTgnIGQ9J00gNTYuMDk2OSw0NC43ODc2IDU4LjkyMDQsMzkuMjQ5Micgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTknIGQ9J00gNTguOTIwNCwzOS4yNDkyIDU1LjUzNTcsMzQuMDM0Nycgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTEwJyBkPSdNIDU5LjU4NjEsMzAuMTc0NCA1OS42NzA4LDMwLjI2NTQnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xMCcgZD0nTSA1OS4wODg5LDMwLjU1MjggNTkuMjU4NSwzMC43MzQ3JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTAnIGQ9J00gNTguNTkxOCwzMC45MzEyIDU4Ljg0NjEsMzEuMjA0MScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTEwJyBkPSdNIDU4LjA5NDcsMzEuMzA5NiA1OC40MzM4LDMxLjY3MzQnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xMCcgZD0nTSA1Ny41OTc1LDMxLjY4OCA1OC4wMjE0LDMyLjE0MjcnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xMCcgZD0nTSA1Ny4xMDA0LDMyLjA2NjQgNTcuNjA5LDMyLjYxMjEnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xMCcgZD0nTSA1Ni42MDMzLDMyLjQ0NDggNTcuMTk2NywzMy4wODE0JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTAnIGQ9J00gNTYuMTA2MSwzMi44MjMyIDU2Ljc4NDMsMzMuNTUwOCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTEwJyBkPSdNIDU1LjYwOSwzMy4yMDE2IDU2LjM3MiwzNC4wMjAxJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTAnIGQ9J00gNTUuMTExOSwzMy41OCA1NS45NTk2LDM0LjQ4OTUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01MCcgZD0nTSA1NS41MzU3LDM0LjAzNDcgNDkuODEyOCwzNi40NjI1JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTYnIGQ9J00gNTQuMjE3OCwyOC41OTY5IDU0LjMzODksMjguNTY4OScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTU2JyBkPSdNIDU0LjI5NjksMjkuMjE2NiA1NC41MzkyLDI5LjE2MDcnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01NicgZD0nTSA1NC4zNzYsMjkuODM2MyA1NC43Mzk1LDI5Ljc1MjUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01NicgZD0nTSA1NC40NTUyLDMwLjQ1NjEgNTQuOTM5OCwzMC4zNDQzJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTYnIGQ9J00gNTQuNTM0MywzMS4wNzU4IDU1LjE0MDEsMzAuOTM2MScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTU2JyBkPSdNIDU0LjYxMzQsMzEuNjk1NSA1NS4zNDA0LDMxLjUyNzknIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01NicgZD0nTSA1NC42OTI2LDMyLjMxNTMgNTUuNTQwNiwzMi4xMTk3JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTYnIGQ9J00gNTQuNzcxNywzMi45MzUgNTUuNzQwOSwzMi43MTE0JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTYnIGQ9J00gNTQuODUwOCwzMy41NTQ3IDU1Ljk0MTIsMzMuMzAzMicgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTU2JyBkPSdNIDU0LjkzLDM0LjE3NDQgNTYuMTQxNSwzMy44OTUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xMScgZD0nTSA2MC4wODMyLDI5Ljc5NiA2NC42MzA3LDI1LjU1NzMnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01OScgZD0nTSA2MC4wODMyLDI5Ljc5NiA2Mi43MDkyLDM1LjQzMDcnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC02MScgZD0nTSA2MC4wODMyLDI5Ljc5NiA1NC4xMzg2LDI3Ljk3NzInIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xMicgZD0nTSA2NC42MzA3LDI1LjU1NzMgNzAuMDY3MiwyOC41NzI0JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTInIGQ9J00gNjQuODQzMSwyNy4wOTY5IDY4LjY0ODcsMjkuMjA3NCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTYzJyBkPSdNIDY0LjYzMDcsMjUuNTU3MyA2My4yMzM2LDE5LjQ5OTcnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xMycgZD0nTSA3MC4wNjcyLDI4LjU3MjQgNzUuOTQ1NSwyNi41NDk3JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNjUnIGQ9J00gNzAuMDY3MiwyOC41NzI0IDY4Ljg3OTYsMzQuNjc0NScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTE0JyBkPSdNIDc1Ljk0NTUsMjYuNTQ5NyA4MC42MzY0LDMwLjYyOTInIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xNCcgZD0nTSA3NS44MzMzLDI4LjA5OTggNzkuMTE2OCwzMC45NTU0JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTUnIGQ9J00gODAuNjM2NCwzMC42MjkyIDc5LjQ0ODgsMzYuNzMxMycgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTE2JyBkPSdNIDc5LjQ0ODgsMzYuNzMxMyA1Ljk4OTY1LDQ1LjczNDcnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xNicgZD0nTSA2OC41ODEyLDM5LjMxNTkgMTcuMTU5OCw0NS42MTgyJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNjcnIGQ9J00gNzkuNDQ4OCwzNi43MzEzIDczLjU3MDUsMzguNzU0JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTcnIGQ9J00gNS45ODk2NSw0NS43MzQ3IDMuMzYzNjQsNDAuMDk5OScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTY4JyBkPSdNIDUuOTg5NjUsNDUuNzM0NyAxMi4xODI1LDQ2LjI3NzgnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0xOCcgZD0nTSAzLjM2MzY0LDQwLjA5OTkgNi45MzA0NSwzNS4wMDg0JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMTgnIGQ9J00gNC45MTY5Nyw0MC4wNDk1IDcuNDEzNzQsMzYuNDg1NScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTE5JyBkPSdNIDYuOTMwNDUsMzUuMDA4NCAxMy4xMjMzLDM1LjU1MTUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0yMCcgZD0nTSAxMy4xMjMzLDM1LjU1MTUgMTcuNjcwNywzMS4zMTI4JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMjAnIGQ9J00gMTQuNjUzMSwzNS44MjUyIDE3LjgzNjQsMzIuODU4MScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTY5JyBkPSdNIDEzLjEyMzMsMzUuNTUxNSAxNS43NDkzLDQxLjE4NjMnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0yMScgZD0nTSAxNy42NzA3LDMxLjMxMjggMTcuNTYzNiwyNS4wOTcxJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNzAnIGQ9J00gMTcuNjcwNywzMS4zMTI4IDIzLjEwNzIsMzQuMzI3OScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTIyJyBkPSdNIDE3LjU2MzYsMjUuMDk3MSAyMi44OTMsMjEuODk2NScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTIyJyBkPSdNIDE5LjAwMzEsMjUuNjgyOSAyMi43MzM3LDIzLjQ0MjUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0yMycgZD0nTSAyMi44OTMsMjEuODk2NSAyOC4zMjk1LDI0LjkxMTYnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0yNCcgZD0nTSAyOC4zMjk1LDI0LjkxMTYgMzQuMjA3OCwyMi44ODg5JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNzEnIGQ9J00gMjguMzI5NSwyNC45MTE2IDI4LjQzNjYsMzEuMTI3Micgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTcxJyBkPSdNIDI3LjEwMjQsMjUuODY1MyAyNy4xNzc0LDMwLjIxNjMnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0yNScgZD0nTSAzNC4yMDc4LDIyLjg4ODkgMzYuNjM4MSwxNy4xNjcnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC03MicgZD0nTSAzNC4yMDc4LDIyLjg4ODkgMzcuOTQ4LDI3Ljg1NDUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC03MicgZD0nTSAzMy43NzU3LDI0LjM4MTggMzYuMzkzOCwyNy44NTc3JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMjYnIGQ9J00gMzYuNjM4MSwxNy4xNjcgNDIuODA4NSwxNi40MTA4JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMjYnIGQ9J00gMzcuNzE0OSwxOC4yODc3IDQyLjAzNDIsMTcuNzU4Mycgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTI3JyBkPSdNIDQyLjgwODUsMTYuNDEwOCA0Ni41NDg3LDIxLjM3NjQnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0yOCcgZD0nTSA0Ni41NDg3LDIxLjM3NjQgNTIuNzQxNSwyMS45MTk2JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMjgnIGQ9J00gNDcuMzY5LDIyLjY5NjQgNTEuNzA0LDIzLjA3NjcnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC03MycgZD0nTSA0Ni41NDg3LDIxLjM3NjQgNDQuMTE4NCwyNy4wOTgzJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMjknIGQ9J00gNTIuNzQxNSwyMS45MTk2IDU3LjI4OSwxNy42ODA5JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMzEnIGQ9J00gNTIuNzQxNSwyMS45MTk2IDU0LjEzODYsMjcuOTc3Micgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTMwJyBkPSdNIDU3LjI4OSwxNy42ODA5IDYzLjIzMzYsMTkuNDk5Nycgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTMwJyBkPSdNIDU3LjgxNjksMTkuMTQyNiA2MS45NzgxLDIwLjQxNTgnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0zMicgZD0nTSA1NC4xMzg2LDI3Ljk3NzIgNDguODA5MywzMS4xNzc4JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMzMnIGQ9J00gNDguODA5MywzMS4xNzc4IDU0Ljc5OTEsNDMuNTgxOScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTU3JyBkPSdNIDQ4LjgwOTMsMzEuMTc3OCA0NC4xMTg0LDI3LjA5ODMnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01NycgZD0nTSA0Ny4yODk3LDMxLjUwNCA0NC4wMDYyLDI4LjY0ODQnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0zNCcgZD0nTSA1NC43OTkxLDQzLjU4MTkgNjAuNTY4Nyw0MS4yNjcyJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMzQnIGQ9J00gNTUuMjAxNiw0Mi4wODA4IDU5LjI0MDQsNDAuNDYwNScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTYyJyBkPSdNIDU0Ljc5OTEsNDMuNTgxOSA1NS4yMTc2LDQ5Ljc4NDQnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0zNScgZD0nTSA2MC41Njg3LDQxLjI2NzIgNjIuNzA5MiwzNS40MzA3JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNjQnIGQ9J00gNjAuNTY4Nyw0MS4yNjcyIDY0LjU1MzEsNDYuMDM5Micgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTM2JyBkPSdNIDYyLjcwOTIsMzUuNDMwNyA2OC44Nzk2LDM0LjY3NDUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC0zNicgZD0nTSA2My43ODYsMzYuNTUxNCA2OC4xMDUzLDM2LjAyMicgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTM3JyBkPSdNIDY4Ljg3OTYsMzQuNjc0NSA3My41NzA1LDM4Ljc1NCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTM4JyBkPSdNIDczLjU3MDUsMzguNzU0IDY5LjAyMyw0Mi45OTI3JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtMzgnIGQ9J00gNzIuMDQwNiwzOC40ODAzIDY4Ljg1NzQsNDEuNDQ3NCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTM5JyBkPSdNIDY5LjAyMyw0Mi45OTI3IDEyLjE4MjUsNDYuMjc3OCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTYwJyBkPSdNIDY5LjAyMyw0Mi45OTI3IDY0LjU1MzEsNDYuMDM5Micgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTQwJyBkPSdNIDEyLjE4MjUsNDYuMjc3OCAxNS43NDkzLDQxLjE4NjMnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC00MCcgZD0nTSAxMy43MzU4LDQ2LjIyNzQgMTYuMjMyNiw0Mi42NjM0JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNDEnIGQ9J00gMTUuNzQ5Myw0MS4xODYzIDIxLjkxOTcsNDAuNDMnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC00MicgZD0nTSAyMS45MTk3LDQwLjQzIDIzLjEwNzIsMzQuMzI3OScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTQyJyBkPSdNIDIwLjg3NzQsMzkuMjc3MiAyMS43MDg3LDM1LjAwNTcnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC02NicgZD0nTSAyMS45MTk3LDQwLjQzIDYxLjI0NTksNTEuMzAzMScgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTQzJyBkPSdNIDIzLjEwNzIsMzQuMzI3OSAyOC40MzY2LDMxLjEyNzInIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC00NCcgZD0nTSAyOC40MzY2LDMxLjEyNzIgMzQuMzgxMiwzMi45NDYxJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNDUnIGQ9J00gMzQuMzgxMiwzMi45NDYxIDU1LjIxNzYsNDkuNzg0NCcgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTQ1JyBkPSdNIDM2LjcyNTIsMzYuNDM4OSA1MS4zMTA3LDQ4LjIyNTcnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC00OCcgZD0nTSAzNC4zODEyLDMyLjk0NjEgMzcuOTQ4LDI3Ljg1NDUnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC00NicgZD0nTSA1NS4yMTc2LDQ5Ljc4NDQgNjEuMjQ1OSw1MS4zMDMxJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNDcnIGQ9J00gNjEuMjQ1OSw1MS4zMDMxIDY0LjU1MzEsNDYuMDM5Micgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTQ3JyBkPSdNIDYwLjY4OTIsNDkuODUyMSA2My4wMDQyLDQ2LjE2NzMnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC00OScgZD0nTSAzNy45NDgsMjcuODU0NSA0NC4xMTg0LDI3LjA5ODMnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01MScgZD0nTSA0OS44MTI4LDM2LjQ2MjUgNDQuODQ4OCwzMi43MjAyJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTEnIGQ9J00gNDguMzE5NywzNi44OTM5IDQ0Ljg0NDksMzQuMjc0Mycgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTU4JyBkPSdNIDQ5LjgxMjgsMzYuNDYyNSA0OS4wNTM4LDQyLjYzMjYnIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8cGF0aCBjbGFzcz0nYm9uZC01MicgZD0nTSA0NC44NDg4LDMyLjcyMDIgMzkuMTI1OSwzNS4xNDc5JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTMnIGQ9J00gMzkuMTI1OSwzNS4xNDc5IDM4LjM2NjksNDEuMzE4JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTMnIGQ9J00gNDAuMjQ2LDM2LjIyNTIgMzkuNzE0OCw0MC41NDQzJyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTQnIGQ9J00gMzguMzY2OSw0MS4zMTggNDMuMzMwOSw0NS4wNjA0JyBzdHlsZT0nZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggY2xhc3M9J2JvbmQtNTUnIGQ9J00gNDMuMzMwOSw0NS4wNjA0IDQ5LjA1MzgsNDIuNjMyNicgc3R5bGU9J2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEnIC8+CjxwYXRoIGNsYXNzPSdib25kLTU1JyBkPSdNIDQzLjcwMzgsNDMuNTUxNiA0Ny43MDk4LDQxLjg1MjInIHN0eWxlPSdmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxJyAvPgo8dGV4dCB4PSc0OS40ODIyJyB5PSc1Ni45MDA1JyBzdHlsZT0nZm9udC1zaXplOjJweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWFuY2hvcjpzdGFydDtmaWxsOiNGRjAwMDAnID48dHNwYW4+TzwvdHNwYW4+PC90ZXh0Pgo8dGV4dCB4PSc1OS4wNzUxJyB5PSc2MS43OTA5JyBzdHlsZT0nZm9udC1zaXplOjJweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWFuY2hvcjpzdGFydDtmaWxsOiNGRjAwMDAnID48dHNwYW4+TzwvdHNwYW4+PC90ZXh0Pgo8cGF0aCBkPSdNIDU5LjA2NzEsNTAuNDE2NCA1OS4wNjcxLDQ5LjU4NzYgNTkuODk2LDQ5LjU4NzYgNTkuODk2LDUwLjQxNjQgNTkuMDY3MSw1MC40MTY0JyBzdHlsZT0nZmlsbDpub25lO3N0cm9rZTojRkYwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggZD0nTSA1NS42ODI1LDQ1LjIwMiA1NS42ODI1LDQ0LjM3MzEgNTYuNTExMyw0NC4zNzMxIDU2LjUxMTMsNDUuMjAyIDU1LjY4MjUsNDUuMjAyJyBzdHlsZT0nZmlsbDpub25lO3N0cm9rZTojRkYwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPHBhdGggZD0nTSA1OC41MDYsMzkuNjYzNiA1OC41MDYsMzguODM0NyA1OS4zMzQ4LDM4LjgzNDcgNTkuMzM0OCwzOS42NjM2IDU4LjUwNiwzOS42NjM2JyBzdHlsZT0nZmlsbDpub25lO3N0cm9rZTojRkYwMDAwO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MScgLz4KPC9zdmc+Cg== CCCCOC(=O)CCCC1([C@]23C4=C5C=CC6=C7C=CC8=C9C=CC%10=C%11C=CC%12=C(C=C4)[C@]31C1=C3C4=C2C5=C6C=2C7=C8C5=C9C%10=C(C3=C5C4=2)C%11=C%121)C1=CC=CC=C1 FZYQHMHIALEGMG-MVOHYUIRSA-N 0 description 3
- 238000004886 process control Methods 0 description 3
- 239000002174 Styrene-butadiene Substances 0 description 2
- 230000001419 dependent Effects 0 description 2
- 239000000284 extracts Substances 0 description 2
- 230000000977 initiatory Effects 0 description 2
- 230000003405 preventing Effects 0 description 2
- 238000003860 storage Methods 0 description 2
- 229920003048 styrene butadiene rubber Polymers 0 description 2
- 238000004458 analytical methods Methods 0 description 1
- 230000004378 blood-retinal barrier Effects 0 description 1
- 239000003795 chemical substance by application Substances 0 description 1
- 238000004891 communication Methods 0 description 1
- 239000000470 constituents Substances 0 description 1
- 230000000694 effects Effects 0 description 1
- 230000014509 gene expression Effects 0 description 1
- 230000001976 improved Effects 0 description 1
- 230000001965 increased Effects 0 description 1
- 238000002955 isolation Methods 0 description 1
- 238000005192 partition Methods 0 description 1
- 238000003672 processing method Methods 0 description 1
- 230000001603 reducing Effects 0 description 1
- 230000014616 translation Effects 0 description 1
- 230000003936 working memory Effects 0 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/202—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
- G06F11/2043—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant where the redundant components share a common memory address space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/202—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
- G06F11/2023—Failover techniques
- G06F11/203—Failover techniques using migration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/202—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
- G06F11/2035—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant without idle spare hardware
Abstract
Description
This application is a continuation of application Ser. No. 08/415,218, filed Mar. 28, 1995, now abandoned, which is a continuation of application Ser. No. 08/264,803, filed Jun. 23, 1994, now abandoned, which is a continuation of application Ser. No. 07/778,030, filed Oct. 17, 1991, now abandoned.
This invention relates generally to digital data processing method and apparatus and, in particular, to method and apparatus for accomplishing an error recovery in a symmetric multi-processor (SMP) data processing system.
Conventional wisdom holds that a failure in one CPU of a SMP data processing system generally results in a "crash" of all other CPUs. One obvious cause is the interdependences resulting from resources that are shared between the CPUs. Both hardware and software approaches have been implemented to prevent tightly coupled SMP systems from failing due to a failure of a constituent CPU.
Hardware solutions generally involve reducing a probability of a hardware failure through either increased fault tolerance or by employing loosely coupled systems. However, these hardware approaches generally circumvent the underlying problem and typically consider error recovery to be a software issue.
Attempts to deal with the problem through software have been somewhat successful, although the success is probabilistic and not reliable.
For example, CPUs which fail may simply be ignored in the hope that the error will be self-correcting. However, this approach typically results in systems which deadlock. That is, the approach results in a condition where a non-failing CPU requires a resource that is owned by the failing CPU, but that cannot be relinquished due to the failure. This condition is referred to in the art as a deadlock. Typically, a resource is locked, or acquired by a first CPU, through an atomic instruction of the test-and-set type. This instruction tests a control variable, a read/write location, and, if the location is not already set, sets the location. Thus, a flag associated with a shared resource is set to indicate that the resource is in use by the first CPU. A second CPU, seeking to acquire the resource, also executes the test-and-set instruction. However, in that the flag is already set, the test fails. A tight loop is typically entered wherein the second CPU "spins" on the "locked" resource, hence the name "spinlock", until the resource is released by the first CPU, the flag is reset, and the second CPU's test-and-set instruction succeeds. As can be realized, if the first CPU fails before releasing the resource, the second CPU will not exit from the spinlock loop.
Another approach requires that a working CPU identify all software resource locks that are owned by the failed CPU in an attempt to release these resources.
This approach may achieve a temporary result of preventing the system from deadlocking. However, downstream effects may become apparent long after the CPU failure. Data corruption is one possible result. Operating systems that rely on this approach assume that some system consistency check will eventually fail. At best, this is a probabilistic strategy, but may represent the most effective of the conventional software techniques for dealing with a CPU failure.
Another conventional approach attempts to partition the system such that any damage resulting from a failed CPU is localized. This results in the failure of at least one executing process, while others remain unaffected.
However, none of these conventional approaches to preventing failure of a tightly coupled SMP system attempt to recover the failed process, nor do they deal effectively with shared resources owned by a failing CPU.
Theoretically, if one could provide enough state information to the operating system, the operating system could reschedule the failing instruction stream on a remaining CPU, and continue operation. In reality, however, this is an extremely complex process for the software to accomplish. For example, the operational CPUs may be waiting for spinlocks that are owned by the failed CPU, and the failed CPU may have been waiting for spinlocks owned by one of the remaining CPUs.
This software complexity could be avoided if the failed CPU could be kept running long enough to complete all existing code threads and perform an orderly shutdown. However, in that the underlying hardware has (by definition) failed, conventional practice has dismissed this approach as being unrealistic.
It is thus one object of the invention to provide method and apparatus to recover a failed process and to deal effectively with shared resources in a SMP data processing system.
It is another object of the invention to provide method and apparatus for use in a SMP data processing system for collecting state information from a failed CPU, or other redundant component, and for providing the state information to a functioning CPU for continuing, at least temporarily, the execution of the affected process in the functional CPU.
The foregoing and other problems are overcome and the objects of the invention are realized by a method and apparatus for operating a multiprocessor data processing system so as to continue the execution of a process running on a failed data processor. In response to a failure of one of the data processors the method performs the following steps. A first step detects that one of the data processors has failed during the execution of a first process. A second step extracts an internal processing state from the failed data processor. A third step inserts or loads the extracted internal processing state into a second, functional data processor. A fourth step completes the execution of the first process with the second data processor, referred to as a recovery data processor. During the time that the second data processor executes the first process the second data processor assumes the identity of the failed data processor, and furthermore assumes the ownership of any spinlocks that may have been owned by the failed data processor prior to the failure. The second data processor may be selected from an inactive set of processors or may be selected from an active set. If selected from the active set the operation of the second data processor may be timeshared between the process associated with the first data processor and a process that is running in the selected data processor. Timesharing involves periodically unloading one processing state and loading another into the second data processor. This loading and unloading may be accomplished by a service processor over a serial scan bus or a parallel diagnostic bus. Loading and unloading may also be accomplished in a high speed manner through a microcode-assisted process run by the second data processor. In accordance with a preferred embodiment of the invention, a portion of a shared system memory is reserved for storing the states of the failed data processor and the recovery data processor. Also, a register is defined for storing flag bits that indicate whether any of the data processors of the system are undergoing recovery. An operating system exception is also defined for informing the operating system of the identity of the failed data processor so that the failed data processor can be permanently assigned to the set of inactive data processors.
In accordance with a second embodiment of the invention there is provided a method of operating a symmetric multiprocessing system in response to a failure of one of the data processors. This method includes the steps of (a) detecting that a first one of the data processors has failed during the execution of an instruction of a process; (b) analyzing the failed instruction to determine if data was corrupted by the failure; and if it is determined that data was not corrupted, (c) saving the process context of the failed data processor within a process controlled block. The method further includes the step of (d) passing the address of the process control block to an operating system executing on a second one of the data processors. The address is passed with an indication that the first data processor has failed. In response to the reception of the address of the process control block the method includes the further steps of (e) placing the process into a run queue; (f) assigning the first data processor to a set of permanently inactive data processors; and (g) scheduling the process for execution upon another data processing means.
The above set forth and other features of the invention are made more apparent in the ensuing Detailed Description of the Invention when read in conjunction with the attached Drawing, wherein:
FIG. 1 is a block diagram of a SMP system that is constructed and operated in accordance with the invention;
FIG. 2 is a flow chart illustrating a first method of the invention;
FIG. 3 is a flow chart illustrating in greater detail the method of FIG. 2;
FIG. 4 shows the organization of a stack that is one aspect of the invention; and
FIG. 5 is a flow chart illustrating a second method of the invention.
Referring to FIG. 1 there is illustrated a SMP system 10 constructed and operated in accordance with the invention.
It is first noted that all program code examples given below are in the VAX (VAX is a registered trademark of the Digital Equipment Corporation) format and, although the invention is described in the context of a system operated in accordance with the VAX family of data processors, it should further be noted that the teaching of the invention applies to SMP systems in general. That is, the teaching of the invention is not intended to be limited to any one particular hardware or software embodiment, system architecture, or family of data processing devices.
As employed herein a SMP data processing system, or SMP system, is considered to include at least two central processing units (CPUs) that are coupled together through a shared memory for executing, in a coordinated fashion, user and operating system (OS) processes. The CPUs may be separate data processing systems connected by wiring to a shared memory unit, or may each be embodied within one or more highly integrated circuit chips that are coupled to a shared memory. Conceptually, a SMP system contains one copy of the operating system, although as a practical matter some components may be physically replicated for improved performance or reliability.
SMP 10 includes a service processor unit (SPU) 12 that is coupled to a plurality of CPUs (CPU0 14, CPU1 16 and CPU2 18) via a SCAN/DIAGNOSTIC Bus (SDB) 12a. Each of the CPUs is bidirectionally coupled by an associated high speed cache memory (CACHE0 14a, CACHE1 16a, CACHE2 18a, respectively) to a shared memory 20.
Although three CPUs are illustrated it should be realized that the system may include from two to some arbitrarily large number of CPUs.
In regard to the SCAN/DIAGNOSTIC Bus 12a, this bus may be a well known type of four wire serial bus that is threaded through the various registers and memory locations in each of the CPUs in order to permit the contents of the internal registers and memories to be serially shifted in or out. Alternatively, the SDB 12a may be embodied as a parallel data path for reading and writing the internal registers and memory locations of the CPUs 14-18.
In greater detail, the SPU 12 includes a local CPU, local working memory, I/O adapters, and a memory region for storing a SPU-executed recovery program, the operation of which is described in detail below. The SPU 12 is coupled, via a SPU memory bus 12b and a SPU memory port 20d, to the shared memory 20. Each of the cache memories 14a-18a is also coupled to the memory 20 through an associated memory port, specifically, Memory Port0 20a, Memory Port1 20b, and Memory Port2 20c, respectively.
Each of the CPUs 14-18 includes a local CPU, a storage for CPU microcode, a micromachine state stored within registers and random access memory (RAM), and a plurality of registers. A detailed description of these registers is provided below.
For the illustrated embodiment the shared memory 20 can also be seen to include a region that stores OS code executed by the CPUs 14-18. A Scheduler Run Queue is also memory resident and includes pointers, represented by arrows, for indicating the location in the memory 20 of user process code and data segments, each of which is typically associated with one of the CPUs 14-18. As can be seen, one of the Scheduler Run Queue entries may correspond to a null process that does not explicitly reference a region in memory 20. Associated with the Scheduler Run Queue is a Scheduler spinlock that can be seen to be busy and owned by the CPU2 18, as indicated by the expression BUSY(2). A CPU data base spinlock is owned by the CPU1 16. Other spinlocks, not shown, may also exist at any given time in the memory 20.
To facilitate the description of the invention the CPU2 18 is designated as a "failed" CPU while the CPU1 16 is designated as a "recovery" CPU. CPUO 14 could also function as the recovery CPU if so desired. A failed CPU is considered to be a CPU that becomes non-operational during the operation of the system 10. The recovery CPU is considered to be CPU that, in accordance with the invention, assumes the identity and functionality of the failed CPU in order to accomplish an orderly termination of the failed CPU functions, including the release of all shared resources that are owned by the failed CPU at the time of failure. This aspect of the invention, controlled by the SPU 12 recovery program, is now described in detail.
Terminology employed herein is first defined.
i-stream--Instruction stream.
PA--Physical Address.
IPL--In the VAX architecture, the highest Interrupt Priority Level which will not be accepted by the CPU.
IPR--Internal processor register. In the VAX architecture, a shared register or memory location accessible only to privileged operating system code.
REI--In the VAX architecture, the instruction which lowers IPL and causes an exit from privileged mode.
SPU--Service Processor Unit. An agent having access to CPU state by serial scan or other means, such as parallel diagnostic busses. In a scan-based design, the SPU is enabled to determine the exact nature of errors, to roll back the i-stream (and modified data) to a continuable state, and to save and modify all processor state information. If an error is recoverable, a macro-machine need see only the loss of time caused by the error isolation and recovery process. If an error is not recoverable, it is still possible for the SPU to extract a continuable state from the failed CPU.
SVPTE--In the VAX architecture, a page table entry which maps a system address.
WHAMI--A read-only VAX IPR which uniquely identifies the executing CPU to the OS.
TODR--In the VAX architecture, the time-of-day IPR.
ELEA--An optional Error Log Entry Available interrupt. A service routine for this interrupt may read TODR to detect and correct for time loss.
SBR, SLR, SPTEP--Memory management registers that control Virtual Memory (VM) translations.
SCBB--Interrupt and exception dispatch base.
ICCS, NICR, ICR--Programmable clock registers.
TODR--Battery-backed time of day register.
TX/RX DB/CS--Console terminal communication registers.
SVPCTX--In the VAX architecture, the instruction which saves the hardware state of a process such that it can be subsequently resumed on another (or the same) CPU.
MAPEN--A register that indicates if memory management is enabled or disabled.
SID--System ID register which may store a CPU type or a CPU serial number.
PCB--Process Control Block.
LDPCTX--A Load Process Content instruction.
PCBB--The PCB Base address.
ISP, USP, SSP--Interrupt, User, and System Stack Pointers, respectively.
SISR--Software Interrupt Summary Register.
R0..Rn--General purpose registers zero through (n).
V0..Vn--Vector registers zero through (n) (data).
VPSR, VAER--Two specific vector control registers.
PSL--Processor status longword, including condition codes.
The foregoing list of registers is representative, it being realized that additional registers may be defined.
Referring to FIG. 2 there is illustrated a flow chart that broadly depicts the operation of a first method of the invention. At Block A it is detected that the CPU2 18 has failed. At Block B the SPU 12 extracts, via the SCAN/DIAGNOSTIC bus 12a, the internal logical state of the CPU2 18. At Block C the SPU 12 inserts the state, including the identity, of the failed CPU2 18 into the functional CPU1 16. At Block D the functional CPU1 16 continues the user or OS process that was executing on the failed CPU in order to accomplish an orderly removal of the failed CPU from the active set, including the relinquishing of any common resources that were owned by the CPU at the time of failure. Once rescheduled, the process need not be terminated and may be context switched, in a conventional fashion, to some other CPU to continue execution.
That is, this first method operates to continue the operation of a failed data processor with a second data processor so as to achieve an orderly removal of the failed data processor from a set of active data processors.
These method steps are now described in greater detail.
The detection of the failed CPU (Block A) may be achieved by several mechanisms. For example, the OS may cause one or more of the CPUs 14-18 to monitor the progress of the other CPUs in order to detect CPU and software failures. Typically, this is accomplished by setting timers on operations, such as a maximum amount of time that a CPU will wait for a spinlock held by another CPU. If the timer expires it is assumed that the spinlock has not been released because of a failure of the CPU that owns the spinlock.
However, when a scan-based CPU encounters an error, a considerable amount of time may elapse before the error is successfully recovered. This is due to the time required to scan-out the error state and analyze the error (Block B) and to scan-in the recovery state (Block C). During this time, other CPUs in the SMP system 10 may continue to run.
This presents the danger of the OS inappropriately deciding that a CPU, which is undergoing error recovery, has failed. If this occurs, the OS may fail or crash. If the OS does not crash, but instead attempts to proceed, it may encounter a spinlock owned by the CPU in error recovery, or may release all such spinlocks. In the latter case, when the CPU returns from error recovery, it may proceed to operate on the previously spinlocked data structure even though it no longer owns the spinlock.
To prevent the OS from declaring a CPU failure when error recovery is in progress, the invention provides an additional IPR referred to as ERIP (Error Recovery In Progress) 20e. A single copy of this read-only IPR exists in the memory 20 for all CPUs in the SMP configuration. This copy is readable by any of the CPUs. In a simplest embodiment each bit of the ERIP IPR corresponds to one of the CPUs 14-18. These bits are normally clear (reset) to represent that the associated CPU is functional, that is, not undergoing error recovery.
In use, after an implementation specific delay from a time that error recovery starts for a CPU, the corresponding ERIP 20e bit is set. An implementation specific delay after error recovery terminates for a CPU, the ERIP 20e bit corresponding to that CPU is cleared.
Referring now to the more detailed flowchart of FIG. 3, when the system 10 is initially started the SPU 12 reserves to itself an implementation dependent number of integral pages of physical memory of sufficient size to store the state of two CPUs (Block A). These areas are designated Failed CPU State (FCPUS) 20f and Recovery CPU State (RCPUS) 20g. This reservation of memory may be accomplished by omitting these pages from an "Available Memory" bitmap, although a number of other techniques are available. The memory reservation may also be accomplished with an odd-sized reservation.
Once started, the OS then initializes two SCB vectors (Block B), which are defined below.
During operation of the system 10, and in response to the SPU 12 detecting an unrecoverable CPU failure, the SPU 12 employs the SDB 12a to extract the state of the failed CPU2 18 (Block C), also referred to hereinafter as CPU-F. The ERIP 22e bit corresponding to CPU-F is then set (Block D). The state of ERIP 20e is interpreted by the OS such that the i-stream is continuable, that is, the state of ERIP 20e reflects a fault or trap condition of a current instruction and not an abort. The SPU 12 analyses the extracted state (Block E), and any extracted state that is not specific to CPU-F is restored to system 10. For example, any written data in the associated write-back cache 18a is returned to main memory 20 such that the remaining CPUs can access the data freely.
The state specific to CPU-F is stored in memory 20 within the CPU-F's recovery region 20g, in an implementation dependent format (Block F). For the VAX implementation described herein the stored state includes at least the following information:
the contents of SBR;
the contents of SLR;
the contents of SPTEP;
the contents of SCBB;
the contents of ICCS, NICR, ICR;
the contents of TODR (if CPU-specific);
the contents of TX/RX DB/CS (if CPU-specific);
the contents of MAPEN;
the contents of SID (if CPU-specific);
the PCB contents at the fault (as required by LDPCTX);
the contents of the PCBB;
the contents of ISP;
the contents of SISR;
the contents of the vector registers;
the contents of VPSR, VAER; and
the contents of any IPR which may identify the failing CPU to software. This explicitly includes such "read-only" registers as WHAMI.
Depending on the implementation of the system 10 other specific CPU state information may be stored. The total state saved is collectively referred to as a recovery state, and contains a sufficient amount of information to continue the interrupted process upon another CPU.
The SPU 12 next selects another, functional, CPU to assist in the recovery process (Block G). This CPU is hereinafter referred to as the recovery CPU (CPU-R). CPU-R may be a CPU which is not currently running and is assigned to an inactive set of CPUs. However, for the typical case, CPU-R is one which is already running the OS as a part of an active set of CPUs. The selection mechanism is biased to avoid a BOOT CPU, which typically maintains the time-of-day for the system 10. However, use of the timekeeper CPU is not precluded if no other CPU is available.
One suitable method for selecting the CPU-R is set forth below in Recovery Method 1 (Select Recovery CPU).
The invention operates by one of two general recovery procedures, depending on whether the CPU-R is in the inactive set or the active set (Block H) of CPUs.
If the selected CPU-R is not in the active set (a simple case) the SPU 12 initializes the CPU-R and loads, via the SDB 12a, the recovery state saved in CPU-F's recover region 20g (Block I). This includes the state information that identifies the CPU-F to the software, such as WHAMI and CPUID. The CPU-R thereafter begins operation, in accordance with the loaded recovery state, (Block J) and the SPU 12 clears the ERIP bit corresponding to CPU-F (Block K). No further action is required, as CPU-R has been substituted for CPU-F. In particular, it should be noted that the members of the active set do not change, as CPU-R has assumed the identity of CPU-F.
However, if at Block H it is determined that the CPU-R was in the active set, a different set of actions must be accomplished.
Having already set the corresponding ERIP bit 20e the SPU 12 notifies the OS by initiating a CPU-Failing exception through a reserved SCB vector (Block L). A CPU-Failing exception is similar to a machine check, in that it occurs at a specific IPL, regardless of the current IPL, and also employs the interrupt stack. The implementation of this exception, however, does not cause any instruction to abort.
As indicated in the CPU-Failing exception stack frame illustrated in FIG. 4, one longword parameter is pushed onto the stack; the identification of CPU-F.
In response to the CPU-Failing exception the OS marks CPU-F's per-CPU database such that CPU-F is caused to halt at the first opportunity, in a manner similar to the operation of the VAX/VMS "STOP/CPU=CPU-F/PERMANENT" instruction. The OS also removes the longword parameter from the stack, and executes an REI (Block M).
In accordance with an aspect of the invention, the SPU 12 allows the OS some predetermined number of instructions to perform these operations before the SPU 12 proceeds. It is noted that it is not critical that the OS complete these operations in the allotted time, although it is highly desirable. By example, for a VAX implementation 1000 instructions is a suitable number.
After notifying the OS of the identification of CPU-F, the SPU 12 loads CPU-R with the recovery state stored in CPU-F's recovery region 20f, and the processor (CPU-F) is given an opportunity to come to an orderly halt (Block N). After loading CPU-R control passes to Block K where the SPU 12 clears the ERIP bit for CPU-F, it being remembered that the identity of CPU-F has been temporarily assumed by the functional CPU-R.
In the event that the OS requires that CPU-R's code be running during the rundown of CPU-F's code the invention further provides for the timesharing of CPU-R between the process code that it was already running in CPU-R and the process code that was running at the time of failure in CPU-F.
One method to timeshare the CPU-R is to employ the SCAN/DIAGNOSTIC bus 12a to periodically scan-out the state of CPU-R and place this state into RCPUS 20g. Next, the state stored in CPU-F's recovery region 20f is scanned into the CPU-R and permitted to execute for some period of time. The state is then scanned-out, stored back into CPU-F's recovery region 20f, and the state stored in CPU-R's storage region 20g is once more scanned into CPU-R. This process continues until the orderly shutdown of the failed processor (CPU-F) is achieved. The OS, having marked the identity of CPU-F in response to the CPU-Failing exception, then shuts down CPU-F such that further processes are not scheduled onto the failed CPU.
The timesharing process is preferably controlled by the SPU 12 so that the initiation of timeslicing is not the responsibility of the OS, which may be in a spinlock wait loop.
The SPU 12 first assigns an implementation specific quantum timeslice. Preferably, the timeslice is at least several tens of thousands of instructions long. One consideration of the length of the timeslice is that it is undesirable to expend a significant portion of the SPU 12 functionality with scanning states in and out of the CPU-R.
Thereafter, a suitable timeslicing recovery method is given by the following:
IF .FLAG neql 1 THEN ERROR (CPU-R code halted);
Initiate exception in physical CPU-R, through CPU-R SCB vector
Exception parameters=FCPUS,RCPUS PA;
Return CPU-R to IO and CSL interrupt set, if previously member.
Remove-- from-- active-- set (CPU-F);
Clear (ERIP{CPU-F!);
Clear (ERIP{CPU-R!);
{Recovery complete}.
In a further embodiment of the invention the SPU 12 is not required to employ the SDB 12a to extract and insert the two states into CPU-R. Instead, the CPU-R includes microcode for storing its processing state into either FCPUS 20f or RCPUS 20g and for loading the stored processing state from the appropriate one of the reserved memory pages. This microcode-assisted method thus employs the high speed memory bus and associated cache of the CPU-R and operates faster than the relatively slower SDB 12a. The recovery microcode may be executed as a result of an interrupt generated by the SPU 12 at the appropriate timeslice intervals.
The following methods illustrate various aspects of the recovery process, including SPU 12 code, OS code reached through the CPU-Failure exception, OS code for the null process, and OS scheduler code.
__________________________________________________________________________1 - Select Recovery CPUCPU.sub.-- R = none;DECRU i FROM max.sub.-- possible.sub.-- CPU to 0 DOIF CPU i! is operational THEN |CPU-F obviously is notIF CPU i! is not in active set THENEXITLOOP (CPU.sub.-- R = -.i) |Remember idle CPU pickedELSEIF CPU i! NEQU Timekeeper (Boot) CPU THENEXITLOOP (CPU.sub.-- R = .i) |Non-timekeeper preferredELSECPU.sub.-- R = .i; |But TK OK if nothing else.IF .CPU.sub.-- R EQL none THENAbort.sub.-- recovery.sub.-- process;|Service processor code, note that both CPU-F and CPU-R `s bits|are set in ERIP. PA is physical address bits <33:02>.Flag = 0WHILE CPU-R has not halted DOBEGINInitiate exception in physical CPU.sub.-- R, thru CPU-RECOVERY SCBvectorException parameters = If .flag eq1 0 thenlow.sub.-- recovery.sub.-- memory, high.sub.-- recovery.sub.-- memory PAelsehigh.sub.-- recovery.sub.-- memory, low.sub.-- recovery.sub.-- memoryPA;IF .FLAG eq1 0 THENBEGINRemove CPU.sub.-- R from CPU set which processes interruptsDon't send any CSL RXdata or TXdone interrupts to CPU.sub.-- RENDELSEUndo previous block;Flag = .Flag XOR 1;Wait (quantum);END;3|OS code reached thru CPU-RECOVERY SCB vector.ALIGN LONG ;Reached via SCB vector at IPL31, as a trap ;or fault, not an abort.;State to load (PA) is at 0(SP);Place to save state (PA) is at 4(SP)SWAPCTX ;This could be an MTPR, or a priv'd instr.4|OS code, in the null processNULLPROCESS:FIND.sub.-- CPU.sub.-- DB R010$: BBS #cpu$v.sub.-- shutdown, cpu$1.sub.-- flags(R0), 20$ ;Branch if shutdown req BRB 10$ ;Continue idle loop;The theory here is that if we are running the null process, we own;no spinlocks. If an OS behaves differently, it must add code to;ensure that no spinlocks are owned before proceeding.20$: BBCCI #cpu$v.sub.-- shutdown,cpu$1.sub.-- flags(r0), .+1 ;No need to shutdownHALT ;Tell service processor we are now idle5|OS code, in the scheduler, prior to looking for a process to runFIND.sub.-- CPU.sub.-- DB R0BBS #cpu$v.sub.-- shutdown, cpu$1.sub.-- flags(R0), run.sub.-- null.sub.-- process__________________________________________________________________________
Further in accordance with the invention the underlying hardware operates to facilitate the temporary assumption of the CPU-F's identity by CPU-R. For example, the mechanism employed to initiate interprocessor interrupts causes an interrupt to occur on whatever physical CPU's WHAMI register matches the interrupt request bit(s). That is, another CPU's request to interrupt CPU-F, while CPU-F is in recovery, interrupts the physical CPU-R, only when CPU-R is running CPU-F's code.
It should be realized that more than one CPU may be in error recovery at any given time.
The error recovery method and apparatus described above is especially effective in dealing with errors that affect the operating system itself, such as code executing on an interrupt stack and code that owns a spinlock. However, most user processes may typically be rescheduled at any time and executed by another CPU. Thus, for some user processes a second error recovery technique packages the process, and the operating system places the process onto the run queue of another CPU. The OS is then notified that a CPU has failed and the failed CPU is removed from the active set. This approach reduces the overall impact on system users as it does not require the service processor to appropriate a recovery CPU.
It should be noted that the second error recovery technique may only be safely applied in certain circumstances. For example, the technique is preferably not applied when the failed CPU is executing on an interrupt stack. As another example, the second technique is preferably not applied when the affected process could not otherwise be rescheduled; that is, when the failed CPU is at or above the Interrupt Priority Level (IPL) used for the scheduler. This second technique should also not be used if the failed CPU owns a spinlock. However, since CPUs own spinlocks, and not processes, the use of IPL in determining whether or not to apply the second technique is generally appropriate. For example, it is generally safe to remove a process running in user mode at IPL 0. For the VAX/VMS embodiment described thus far, the IPL threshold is 3, although for other operating systems another IPL threshold may be appropriate.
In regard to a specific VAX implementation of this second technique, the SPU 12 operates to back-up the failing instruction, and causes a SVPCTX instruction to be executed on behalf of the CPU-F. The address of the affected PCB is passed to the OS, preferably via an interprocessor interrupt to a CPU picked at random. The CPU to which the interprocessor interrupt is directed builds a machine check stack frame and issues a machine check. The error detail may be transmitted via a DMA mechanism, as it is not time critical. CPU-F is left halted, with the appropriate ERIP 20e bit set. This bit being set prevents the remaining CPU(S) from timing-out CPU-F before the interprocessor interrupt is seen. If CPU-F was the only CPU fielding I/O interrupts, another CPU is selected and enabled to take over this function. In any case, the CPU-F no longer receives external interrupts.
A specific example for a two CPU system is now given, and reference is made to the flow chart of FIG. 5. It is assumed that CPU 1 has a user process active in user mode. A string move instruction fails approximately half way through the target string due to an unrecoverable parity error in the CPU 1 data path. At Block A the SPU 12 analyzes the failed instruction and determines that no data is corrupted. This analysis involves determining the nature of the failure. For example, if bad parity for a memory address register is indicated, and if a memory write operation had just taken place, there is a high probability that memory data is corrupted in that the written data was erroneously stored in an unintended memory location. For this type of failure, the system may be halted with an unrecoverable error indication signaled.
However, if a bad parity indication is set for a register that was to be written to, it can be assumed that no data has been corrupted, in that the contents of the failed register would have been overwritten by the continued execution of the instruction. Thus, the second recovery technique may be safely used.
The SPU 12 determines from the internal state of the failed CPU how much of the target string has been processed, and updates the general registers and PSL of the failed CPU as though an interrupt occurred (Block B). At Block C the SPU 12 executes a `Save Process Context` (SVPCTX instruction in a VAX embodiment). This results in all process state information for the failed CPU being saved in memory (the PCB). By example, the SPU 12 computes a new value for R0 which is saved in (PCBB)+16. R9, although not affected by the string move instruction, may have been modified since the process was scheduled. R9 is thus saved in (PCBB)+52. Other general purpose registers and elements of the process state are similarly saved by the SPU 12. At Block D the SPU 12 passes the address of the PCB to the OS operating on CPU 0. The OS verifies that this PCB matches the current process PCB on the specified CPU. The OS then changes the process state from `current` to `computable`, and places the process back into the run queue. The OS then marks CPU 1 as not running (Block E). The process is then scheduled for further execution on another CPU in a normal fashion (Block F).
While the invention has been particularly shown and described with respect to preferred embodiments thereof, it will be understood by those skilled in the art that changes in form and details may be made therein without departing from the scope and spirit of the invention.
Claims (23)
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US77803091A true | 1991-10-17 | 1991-10-17 | |
US26480394A true | 1994-06-23 | 1994-06-23 | |
US41521895A true | 1995-03-28 | 1995-03-28 | |
US08/711,386 US5815651A (en) | 1991-10-17 | 1996-09-06 | Method and apparatus for CPU failure recovery in symmetric multi-processing systems |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/711,386 US5815651A (en) | 1991-10-17 | 1996-09-06 | Method and apparatus for CPU failure recovery in symmetric multi-processing systems |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date | |
---|---|---|---|---|
US41521895A Continuation | 1995-03-28 | 1995-03-28 |
Publications (1)
Publication Number | Publication Date |
---|---|
US5815651A true US5815651A (en) | 1998-09-29 |
Family
ID=27401735
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US08/711,386 Expired - Lifetime US5815651A (en) | 1991-10-17 | 1996-09-06 | Method and apparatus for CPU failure recovery in symmetric multi-processing systems |
Country Status (1)
Country | Link |
---|---|
US (1) | US5815651A (en) |
Cited By (61)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5983359A (en) * | 1996-03-18 | 1999-11-09 | Hitachi, Ltd. | Processor fault recovering method for information processing system |
US6138248A (en) * | 1997-01-17 | 2000-10-24 | Hitachi, Ltd. | Common disk unit multi-computer system |
WO2000064199A2 (en) * | 1999-04-14 | 2000-10-26 | Telefonaktiebolaget Lm Ericsson (Publ) | Recovery in mobile communication systems |
US6202160B1 (en) | 1997-05-13 | 2001-03-13 | Micron Electronics, Inc. | System for independent powering of a computer system |
US6216051B1 (en) * | 1998-05-04 | 2001-04-10 | Nec Electronics, Inc. | Manufacturing backup system |
US6223234B1 (en) | 1998-07-17 | 2001-04-24 | Micron Electronics, Inc. | Apparatus for the hot swap and add of input/output platforms and devices |
US6243773B1 (en) | 1997-05-13 | 2001-06-05 | Micron Electronics, Inc. | Configuration management system for hot adding and hot replacing devices |
US6247080B1 (en) | 1997-05-13 | 2001-06-12 | Micron Electronics, Inc. | Method for the hot add of devices |
US6249828B1 (en) | 1997-05-13 | 2001-06-19 | Micron Electronics, Inc. | Method for the hot swap of a mass storage adapter on a system including a statically loaded adapter driver |
US6253334B1 (en) | 1997-05-13 | 2001-06-26 | Micron Electronics, Inc. | Three bus server architecture with a legacy PCI bus and mirrored I/O PCI buses |
US6269417B1 (en) | 1997-05-13 | 2001-07-31 | Micron Technology, Inc. | Method for determining and displaying the physical slot number of an expansion bus device |
US6269412B1 (en) | 1997-05-13 | 2001-07-31 | Micron Technology, Inc. | Apparatus for recording information system events |
US6272648B1 (en) | 1997-05-13 | 2001-08-07 | Micron Electronics, Inc. | System for communicating a software-generated pulse waveform between two servers in a network |
US6275953B1 (en) * | 1997-09-26 | 2001-08-14 | Emc Corporation | Recovery from failure of a data processor in a network server |
US6282673B1 (en) | 1997-05-13 | 2001-08-28 | Micron Technology, Inc. | Method of recording information system events |
US6292905B1 (en) * | 1997-05-13 | 2001-09-18 | Micron Technology, Inc. | Method for providing a fault tolerant network using distributed server processes to remap clustered network resources to other servers during server failure |
US6324608B1 (en) | 1997-05-13 | 2001-11-27 | Micron Electronics | Method for hot swapping of network components |
US6332202B1 (en) | 1997-05-13 | 2001-12-18 | Micron Technology, Inc. | Method of remote access and control of environmental conditions |
US6338150B1 (en) | 1997-05-13 | 2002-01-08 | Micron Technology, Inc. | Diagnostic and managing distributed processor system |
US6363497B1 (en) | 1997-05-13 | 2002-03-26 | Micron Technology, Inc. | System for clustering software applications |
US6370657B1 (en) * | 1998-11-19 | 2002-04-09 | Compaq Computer Corporation | Hot processor swap in a multiprocessor personal computer system |
US6381681B1 (en) * | 1999-09-30 | 2002-04-30 | Silicon Graphics, Inc. | System and method for shared memory protection in a multiprocessor computer |
US6393590B1 (en) * | 1998-12-22 | 2002-05-21 | Nortel Networks Limited | Method and apparatus for ensuring proper functionality of a shared memory, multiprocessor system |
US6418517B1 (en) * | 1997-08-29 | 2002-07-09 | International Business Machines Corporation | Optimized function execution for a multiprocessor computer system |
US6418492B1 (en) | 1997-05-13 | 2002-07-09 | Micron Electronics | Method for computer implemented hot-swap and hot-add |
US6421688B1 (en) | 1999-10-20 | 2002-07-16 | Parallel Computers Technology, Inc. | Method and apparatus for database fault tolerance with instant transaction replication using off-the-shelf database servers and low bandwidth networks |
US20020120809A1 (en) * | 2000-09-07 | 2002-08-29 | Hiroyuki Machida | Computer, method of controlling computer, and recording medium onto which method of controlling is recorded |
US6487677B1 (en) * | 1999-09-30 | 2002-11-26 | Lsi Logic Corporation | Methods and systems for dynamic selection of error recovery procedures in a managed device |
US6499073B1 (en) | 1997-05-13 | 2002-12-24 | Micron Electronics, Inc. | System using programmable processor for selectively enabling or disabling power to adapter in response to respective request signals |
US6516429B1 (en) * | 1999-11-04 | 2003-02-04 | International Business Machines Corporation | Method and apparatus for run-time deconfiguration of a processor in a symmetrical multi-processing system |
EP1290556A1 (en) * | 2000-06-16 | 2003-03-12 | Bull HN Information Systems Inc. | Fast relief swapping of processors in a data processing system |
US6550019B1 (en) * | 1999-11-04 | 2003-04-15 | International Business Machines Corporation | Method and apparatus for problem identification during initial program load in a multiprocessor system |
US20030088626A1 (en) * | 1998-12-18 | 2003-05-08 | Reema Gupta | Messaging mechanism for inter processor communication |
US20030115500A1 (en) * | 2000-12-14 | 2003-06-19 | International Business Machines Corporation | Processor with redundant logic |
US20030131279A1 (en) * | 2002-01-10 | 2003-07-10 | International Business Machines Corporation | System, method, and computer program product for preventing machine crashes due to hard errors in logically partitioned systems |
US6625752B1 (en) * | 1998-01-20 | 2003-09-23 | Siemens Aktiengesellschaft | Method for improving system availability following the failure of the processors of a processor platform |
US6697963B1 (en) | 1997-05-13 | 2004-02-24 | Micron Technology, Inc. | Method of updating a system environmental setting |
US20040068677A1 (en) * | 2002-10-03 | 2004-04-08 | International Business Machines Corporation | Diagnostic probe management in data processing systems |
US6735716B1 (en) * | 1999-09-27 | 2004-05-11 | Cisco Technology, Inc. | Computerized diagnostics and failure recovery |
US20040221193A1 (en) * | 2003-04-17 | 2004-11-04 | International Business Machines Corporation | Transparent replacement of a failing processor |
US20050246567A1 (en) * | 2004-04-14 | 2005-11-03 | Bretschneider Ronald E | Apparatus, system, and method for transactional peer recovery in a data sharing clustering computer system |
US6996745B1 (en) | 2001-09-27 | 2006-02-07 | Sun Microsystems, Inc. | Process for shutting down a CPU in a SMP configuration |
US20060104209A1 (en) * | 2004-11-18 | 2006-05-18 | De Araujo Daniel F | Failure isolation in a communication system |
US20070061618A1 (en) * | 2005-09-09 | 2007-03-15 | International Business Machines Corporation | Method and system to execute recovery in non-homogeneous multi processor environments |
US20070124522A1 (en) * | 2005-11-30 | 2007-05-31 | Ellison Brandon J | Node detach in multi-node system |
US20070130567A1 (en) * | 1999-08-25 | 2007-06-07 | Peter Van Der Veen | Symmetric multi-processor system |
US20070168716A1 (en) * | 2006-01-19 | 2007-07-19 | Silicon Graphics, Inc. | Failsoft system for multiple CPU system |
US20080046400A1 (en) * | 2006-08-04 | 2008-02-21 | Shi Justin Y | Apparatus and method of optimizing database clustering with zero transaction loss |
US20080114973A1 (en) * | 2006-10-31 | 2008-05-15 | Norton Scott J | Dynamic hardware multithreading and partitioned hardware multithreading |
US20080162989A1 (en) * | 2004-10-25 | 2008-07-03 | Robert Bosch Gmbh | Method, Operating System and Computing Hardware for Running a Computer Program |
US20080215909A1 (en) * | 2004-04-14 | 2008-09-04 | International Business Machines Corporation | Apparatus, system, and method for transactional peer recovery in a data sharing clustering computer system |
US20090031161A1 (en) * | 2004-10-25 | 2009-01-29 | Reinhard Weiberle | Method, operating system and computing hardware for running a computer program |
US20090094419A1 (en) * | 2007-10-05 | 2009-04-09 | International Business Machines Corporation | Varying access parameters for processes to access memory addresses in response to detecting a condition related to a pattern of processes access to memory addresses |
US20090094478A1 (en) * | 2007-10-05 | 2009-04-09 | International Business Machines Corporation | Recovery of application faults in a mirrored application environment |
US20090094430A1 (en) * | 2007-10-05 | 2009-04-09 | International Business Machines Corporation | Providing a process exclusive access to a page including a memory address to which a lock is granted to the process |
US20090094431A1 (en) * | 2007-10-05 | 2009-04-09 | International Business Machines Corporation | Monitoring patterns of processes accessing addresses in a storage device to determine access parameters to apply |
US20090259884A1 (en) * | 2008-04-11 | 2009-10-15 | International Business Machines Corporation | Cost-reduced redundant service processor configuration |
CN101236515B (en) | 2007-01-31 | 2010-05-19 | 迈普通信技术股份有限公司 | Multi-core system single-core abnormity restoration method |
US20120159242A1 (en) * | 2010-12-16 | 2012-06-21 | Raymond Richardson | Method and System For Spinlock Fault Recovery |
US20130091380A1 (en) * | 2011-10-07 | 2013-04-11 | International Business Machines Corporation | Dynamically Reconfiguring A Primary Processor Identity Within A Multi-Processor Socket Server |
WO2015094260A1 (en) | 2013-12-19 | 2015-06-25 | Intel Corporation | Elastic virtual multipath resource access using sequestered partitions |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3959638A (en) * | 1974-02-15 | 1976-05-25 | International Business Machines Corporation | Highly available computer system |
US4200226A (en) * | 1978-07-12 | 1980-04-29 | Euteco S.P.A. | Parallel multiprocessing system for an industrial plant |
US4562538A (en) * | 1983-05-16 | 1985-12-31 | At&T Bell Laboratories | Microprocessor having decision pointer to process restore position |
US4628508A (en) * | 1981-03-31 | 1986-12-09 | British Telecommunications | Computer of processor control systems |
US4751702A (en) * | 1986-02-10 | 1988-06-14 | International Business Machines Corporation | Improving availability of a restartable staged storage data base system that uses logging facilities |
US4775976A (en) * | 1985-09-25 | 1988-10-04 | Hitachi, Ltd. | Method and apparatus for backing up data transmission system |
US4823256A (en) * | 1984-06-22 | 1989-04-18 | American Telephone And Telegraph Company, At&T Bell Laboratories | Reconfigurable dual processor system |
US4894828A (en) * | 1987-12-22 | 1990-01-16 | Amdahl Corporation | Multiple sup swap mechanism |
US5214652A (en) * | 1991-03-26 | 1993-05-25 | International Business Machines Corporation | Alternate processor continuation of task of failed processor |
US5235700A (en) * | 1990-02-08 | 1993-08-10 | International Business Machines Corporation | Checkpointing mechanism for fault-tolerant systems |
-
1996
- 1996-09-06 US US08/711,386 patent/US5815651A/en not_active Expired - Lifetime
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3959638A (en) * | 1974-02-15 | 1976-05-25 | International Business Machines Corporation | Highly available computer system |
US4200226A (en) * | 1978-07-12 | 1980-04-29 | Euteco S.P.A. | Parallel multiprocessing system for an industrial plant |
US4628508A (en) * | 1981-03-31 | 1986-12-09 | British Telecommunications | Computer of processor control systems |
US4562538A (en) * | 1983-05-16 | 1985-12-31 | At&T Bell Laboratories | Microprocessor having decision pointer to process restore position |
US4823256A (en) * | 1984-06-22 | 1989-04-18 | American Telephone And Telegraph Company, At&T Bell Laboratories | Reconfigurable dual processor system |
US4775976A (en) * | 1985-09-25 | 1988-10-04 | Hitachi, Ltd. | Method and apparatus for backing up data transmission system |
US4751702A (en) * | 1986-02-10 | 1988-06-14 | International Business Machines Corporation | Improving availability of a restartable staged storage data base system that uses logging facilities |
US4894828A (en) * | 1987-12-22 | 1990-01-16 | Amdahl Corporation | Multiple sup swap mechanism |
US5235700A (en) * | 1990-02-08 | 1993-08-10 | International Business Machines Corporation | Checkpointing mechanism for fault-tolerant systems |
US5214652A (en) * | 1991-03-26 | 1993-05-25 | International Business Machines Corporation | Alternate processor continuation of task of failed processor |
Cited By (108)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5983359A (en) * | 1996-03-18 | 1999-11-09 | Hitachi, Ltd. | Processor fault recovering method for information processing system |
US6138248A (en) * | 1997-01-17 | 2000-10-24 | Hitachi, Ltd. | Common disk unit multi-computer system |
US6418492B1 (en) | 1997-05-13 | 2002-07-09 | Micron Electronics | Method for computer implemented hot-swap and hot-add |
US7669064B2 (en) | 1997-05-13 | 2010-02-23 | Micron Technology, Inc. | Diagnostic and managing distributed processor system |
US6202160B1 (en) | 1997-05-13 | 2001-03-13 | Micron Electronics, Inc. | System for independent powering of a computer system |
US6681342B2 (en) | 1997-05-13 | 2004-01-20 | Micron Technology, Inc. | Diagnostic and managing distributed processor system |
US6697963B1 (en) | 1997-05-13 | 2004-02-24 | Micron Technology, Inc. | Method of updating a system environmental setting |
US6243773B1 (en) | 1997-05-13 | 2001-06-05 | Micron Electronics, Inc. | Configuration management system for hot adding and hot replacing devices |
US6247080B1 (en) | 1997-05-13 | 2001-06-12 | Micron Electronics, Inc. | Method for the hot add of devices |
US6249828B1 (en) | 1997-05-13 | 2001-06-19 | Micron Electronics, Inc. | Method for the hot swap of a mass storage adapter on a system including a statically loaded adapter driver |
US6253334B1 (en) | 1997-05-13 | 2001-06-26 | Micron Electronics, Inc. | Three bus server architecture with a legacy PCI bus and mirrored I/O PCI buses |
US6269417B1 (en) | 1997-05-13 | 2001-07-31 | Micron Technology, Inc. | Method for determining and displaying the physical slot number of an expansion bus device |
US6269412B1 (en) | 1997-05-13 | 2001-07-31 | Micron Technology, Inc. | Apparatus for recording information system events |
US8468372B2 (en) | 1997-05-13 | 2013-06-18 | Round Rock Research, Llc | Diagnostic and managing distributed processor system |
US6499073B1 (en) | 1997-05-13 | 2002-12-24 | Micron Electronics, Inc. | System using programmable processor for selectively enabling or disabling power to adapter in response to respective request signals |
US6282673B1 (en) | 1997-05-13 | 2001-08-28 | Micron Technology, Inc. | Method of recording information system events |
US6292905B1 (en) * | 1997-05-13 | 2001-09-18 | Micron Technology, Inc. | Method for providing a fault tolerant network using distributed server processes to remap clustered network resources to other servers during server failure |
US6324608B1 (en) | 1997-05-13 | 2001-11-27 | Micron Electronics | Method for hot swapping of network components |
US6332202B1 (en) | 1997-05-13 | 2001-12-18 | Micron Technology, Inc. | Method of remote access and control of environmental conditions |
US6338150B1 (en) | 1997-05-13 | 2002-01-08 | Micron Technology, Inc. | Diagnostic and managing distributed processor system |
US6363497B1 (en) | 1997-05-13 | 2002-03-26 | Micron Technology, Inc. | System for clustering software applications |
US6701453B2 (en) | 1997-05-13 | 2004-03-02 | Micron Technology, Inc. | System for clustering software applications |
US6484226B2 (en) | 1997-05-13 | 2002-11-19 | Micron Technology, Inc. | System and method for the add or swap of an adapter on an operating computer |
US6742069B2 (en) | 1997-05-13 | 2004-05-25 | Micron Technology, Inc. | Method of providing an interface to a plurality of peripheral devices using bus adapter chips |
US6272648B1 (en) | 1997-05-13 | 2001-08-07 | Micron Electronics, Inc. | System for communicating a software-generated pulse waveform between two servers in a network |
US6598173B1 (en) | 1997-05-13 | 2003-07-22 | Micron Technology, Inc. | Method of remote access and control of environmental conditions |
US6604207B2 (en) | 1997-05-13 | 2003-08-05 | Micron Technology, Inc. | System architecture for remote access and control of environmental management |
US6418517B1 (en) * | 1997-08-29 | 2002-07-09 | International Business Machines Corporation | Optimized function execution for a multiprocessor computer system |
US6275953B1 (en) * | 1997-09-26 | 2001-08-14 | Emc Corporation | Recovery from failure of a data processor in a network server |
US6625752B1 (en) * | 1998-01-20 | 2003-09-23 | Siemens Aktiengesellschaft | Method for improving system availability following the failure of the processors of a processor platform |
US6216051B1 (en) * | 1998-05-04 | 2001-04-10 | Nec Electronics, Inc. | Manufacturing backup system |
US6223234B1 (en) | 1998-07-17 | 2001-04-24 | Micron Electronics, Inc. | Apparatus for the hot swap and add of input/output platforms and devices |
US6370657B1 (en) * | 1998-11-19 | 2002-04-09 | Compaq Computer Corporation | Hot processor swap in a multiprocessor personal computer system |
US20070271572A1 (en) * | 1998-12-18 | 2007-11-22 | Emc Corporation | Messaging mechanism for inter processor communication |
US7233977B2 (en) * | 1998-12-18 | 2007-06-19 | Emc Corporation | Messaging mechanism employing mailboxes for inter processor communications |
US20030088626A1 (en) * | 1998-12-18 | 2003-05-08 | Reema Gupta | Messaging mechanism for inter processor communication |
US7996574B2 (en) | 1998-12-18 | 2011-08-09 | Emc Corporation | Messaging mechanism for inter processor communication |
US6393590B1 (en) * | 1998-12-22 | 2002-05-21 | Nortel Networks Limited | Method and apparatus for ensuring proper functionality of a shared memory, multiprocessor system |
WO2000064199A3 (en) * | 1999-04-14 | 2001-02-01 | Ericsson Telefon Ab L M | Recovery in mobile communication systems |
WO2000064199A2 (en) * | 1999-04-14 | 2000-10-26 | Telefonaktiebolaget Lm Ericsson (Publ) | Recovery in mobile communication systems |
AU770164B2 (en) * | 1999-04-14 | 2004-02-12 | Telefonaktiebolaget Lm Ericsson (Publ) | Recovery in mobile communication systems |
US6775542B1 (en) | 1999-04-14 | 2004-08-10 | Telefonaktiebolaget Lm Ericsson | Recovery in mobile communication systems |
US20070130567A1 (en) * | 1999-08-25 | 2007-06-07 | Peter Van Der Veen | Symmetric multi-processor system |
US8572626B2 (en) | 1999-08-25 | 2013-10-29 | Qnx Software Systems Limited | Symmetric multi-processor system |
US7996843B2 (en) | 1999-08-25 | 2011-08-09 | Qnx Software Systems Gmbh & Co. Kg | Symmetric multi-processor system |
US6735716B1 (en) * | 1999-09-27 | 2004-05-11 | Cisco Technology, Inc. | Computerized diagnostics and failure recovery |
US6487677B1 (en) * | 1999-09-30 | 2002-11-26 | Lsi Logic Corporation | Methods and systems for dynamic selection of error recovery procedures in a managed device |
US6381681B1 (en) * | 1999-09-30 | 2002-04-30 | Silicon Graphics, Inc. | System and method for shared memory protection in a multiprocessor computer |
US6421688B1 (en) | 1999-10-20 | 2002-07-16 | Parallel Computers Technology, Inc. | Method and apparatus for database fault tolerance with instant transaction replication using off-the-shelf database servers and low bandwidth networks |
US6516429B1 (en) * | 1999-11-04 | 2003-02-04 | International Business Machines Corporation | Method and apparatus for run-time deconfiguration of a processor in a symmetrical multi-processing system |
US6550019B1 (en) * | 1999-11-04 | 2003-04-15 | International Business Machines Corporation | Method and apparatus for problem identification during initial program load in a multiprocessor system |
EP1290556A1 (en) * | 2000-06-16 | 2003-03-12 | Bull HN Information Systems Inc. | Fast relief swapping of processors in a data processing system |
EP1290556A4 (en) * | 2000-06-16 | 2007-08-29 | Bull Hn Information Syst | Fast relief swapping of processors in a data processing system |
US7096472B2 (en) * | 2000-09-07 | 2006-08-22 | Sony Computer Entertainment Inc. | Systems and methods for ensuring atomicity of processes in a multitasking computing environment |
US20020120809A1 (en) * | 2000-09-07 | 2002-08-29 | Hiroyuki Machida | Computer, method of controlling computer, and recording medium onto which method of controlling is recorded |
US20030115500A1 (en) * | 2000-12-14 | 2003-06-19 | International Business Machines Corporation | Processor with redundant logic |
US6785841B2 (en) * | 2000-12-14 | 2004-08-31 | International Business Machines Corporation | Processor with redundant logic |
US6996745B1 (en) | 2001-09-27 | 2006-02-07 | Sun Microsystems, Inc. | Process for shutting down a CPU in a SMP configuration |
US6898731B2 (en) * | 2002-01-10 | 2005-05-24 | International Business Machines Corporation | System, method, and computer program product for preventing machine crashes due to hard errors in logically partitioned systems |
US20030131279A1 (en) * | 2002-01-10 | 2003-07-10 | International Business Machines Corporation | System, method, and computer program product for preventing machine crashes due to hard errors in logically partitioned systems |
US7254745B2 (en) | 2002-10-03 | 2007-08-07 | International Business Machines Corporation | Diagnostic probe management in data processing systems |
US20040068677A1 (en) * | 2002-10-03 | 2004-04-08 | International Business Machines Corporation | Diagnostic probe management in data processing systems |
US7275180B2 (en) * | 2003-04-17 | 2007-09-25 | International Business Machines Corporation | Transparent replacement of a failing processor |
US20040221193A1 (en) * | 2003-04-17 | 2004-11-04 | International Business Machines Corporation | Transparent replacement of a failing processor |
US7281153B2 (en) * | 2004-04-14 | 2007-10-09 | International Business Machines Corporation | Apparatus, system, and method for transactional peer recovery in a data sharing clustering computer system |
US20050246567A1 (en) * | 2004-04-14 | 2005-11-03 | Bretschneider Ronald E | Apparatus, system, and method for transactional peer recovery in a data sharing clustering computer system |
US20080215909A1 (en) * | 2004-04-14 | 2008-09-04 | International Business Machines Corporation | Apparatus, system, and method for transactional peer recovery in a data sharing clustering computer system |
US7870426B2 (en) | 2004-04-14 | 2011-01-11 | International Business Machines Corporation | Apparatus, system, and method for transactional peer recovery in a data sharing clustering computer system |
US20090254773A1 (en) * | 2004-10-25 | 2009-10-08 | Reinhard Weiberle | Method, operating system and computing hardware for running a computer program |
US20080162989A1 (en) * | 2004-10-25 | 2008-07-03 | Robert Bosch Gmbh | Method, Operating System and Computing Hardware for Running a Computer Program |
US7788533B2 (en) * | 2004-10-25 | 2010-08-31 | Robert Bosch Gmbh | Restarting an errored object of a first class |
US20090031161A1 (en) * | 2004-10-25 | 2009-01-29 | Reinhard Weiberle | Method, operating system and computing hardware for running a computer program |
US7711985B2 (en) * | 2004-10-25 | 2010-05-04 | Robert Bosch Gmbh | Restarting an errored object of a first class |
US7716524B2 (en) * | 2004-10-25 | 2010-05-11 | Robert Bosch Gmbh | Restarting an errored object of a first class |
US7624305B2 (en) | 2004-11-18 | 2009-11-24 | International Business Machines Corporation | Failure isolation in a communication system |
US20060104209A1 (en) * | 2004-11-18 | 2006-05-18 | De Araujo Daniel F | Failure isolation in a communication system |
US7502957B2 (en) * | 2005-09-09 | 2009-03-10 | International Business Machines Corporation | Method and system to execute recovery in non-homogeneous multi processor environments |
CN100456250C (en) | 2005-09-09 | 2009-01-28 | 国际商业机器公司 | Method and system to execute recovery |
US7765429B2 (en) * | 2005-09-09 | 2010-07-27 | International Business Machines Corporation | Method and system to execute recovery in non-homogenous multi processor environments |
US20090138758A1 (en) * | 2005-09-09 | 2009-05-28 | International Business Machines Corporation | Method and system to execute recovery in non-homogeneous multi processor environments |
US20070061618A1 (en) * | 2005-09-09 | 2007-03-15 | International Business Machines Corporation | Method and system to execute recovery in non-homogeneous multi processor environments |
CN100485639C (en) | 2005-11-30 | 2009-05-06 | 国际商业机器公司 | Method and system for providing node separation in multi-node system |
US20070124522A1 (en) * | 2005-11-30 | 2007-05-31 | Ellison Brandon J | Node detach in multi-node system |
US8078907B2 (en) * | 2006-01-19 | 2011-12-13 | Silicon Graphics, Inc. | Failsoft system for multiple CPU system |
US20070168716A1 (en) * | 2006-01-19 | 2007-07-19 | Silicon Graphics, Inc. | Failsoft system for multiple CPU system |
US20080046400A1 (en) * | 2006-08-04 | 2008-02-21 | Shi Justin Y | Apparatus and method of optimizing database clustering with zero transaction loss |
US20080114973A1 (en) * | 2006-10-31 | 2008-05-15 | Norton Scott J | Dynamic hardware multithreading and partitioned hardware multithreading |
US7698540B2 (en) * | 2006-10-31 | 2010-04-13 | Hewlett-Packard Development Company, L.P. | Dynamic hardware multithreading and partitioned hardware multithreading |
CN101236515B (en) | 2007-01-31 | 2010-05-19 | 迈普通信技术股份有限公司 | Multi-core system single-core abnormity restoration method |
US7770064B2 (en) | 2007-10-05 | 2010-08-03 | International Business Machines Corporation | Recovery of application faults in a mirrored application environment |
US7856536B2 (en) * | 2007-10-05 | 2010-12-21 | International Business Machines Corporation | Providing a process exclusive access to a page including a memory address to which a lock is granted to the process |
US20090094430A1 (en) * | 2007-10-05 | 2009-04-09 | International Business Machines Corporation | Providing a process exclusive access to a page including a memory address to which a lock is granted to the process |
US7921272B2 (en) * | 2007-10-05 | 2011-04-05 | International Business Machines Corporation | Monitoring patterns of processes accessing addresses in a storage device to determine access parameters to apply |
US20090094478A1 (en) * | 2007-10-05 | 2009-04-09 | International Business Machines Corporation | Recovery of application faults in a mirrored application environment |
US20090094419A1 (en) * | 2007-10-05 | 2009-04-09 | International Business Machines Corporation | Varying access parameters for processes to access memory addresses in response to detecting a condition related to a pattern of processes access to memory addresses |
US20090094431A1 (en) * | 2007-10-05 | 2009-04-09 | International Business Machines Corporation | Monitoring patterns of processes accessing addresses in a storage device to determine access parameters to apply |
US8055855B2 (en) * | 2007-10-05 | 2011-11-08 | International Business Machines Corporation | Varying access parameters for processes to access memory addresses in response to detecting a condition related to a pattern of processes access to memory addresses |
US7836335B2 (en) * | 2008-04-11 | 2010-11-16 | International Business Machines Corporation | Cost-reduced redundant service processor configuration |
US20090259884A1 (en) * | 2008-04-11 | 2009-10-15 | International Business Machines Corporation | Cost-reduced redundant service processor configuration |
US20120159242A1 (en) * | 2010-12-16 | 2012-06-21 | Raymond Richardson | Method and System For Spinlock Fault Recovery |
US8595567B2 (en) * | 2010-12-16 | 2013-11-26 | Wind River Systems, Inc. | Method and system for spinlock fault recovery |
US20130091380A1 (en) * | 2011-10-07 | 2013-04-11 | International Business Machines Corporation | Dynamically Reconfiguring A Primary Processor Identity Within A Multi-Processor Socket Server |
US8819484B2 (en) * | 2011-10-07 | 2014-08-26 | International Business Machines Corporation | Dynamically reconfiguring a primary processor identity within a multi-processor socket server |
WO2015094260A1 (en) | 2013-12-19 | 2015-06-25 | Intel Corporation | Elastic virtual multipath resource access using sequestered partitions |
CN105765546A (en) * | 2013-12-19 | 2016-07-13 | 英特尔公司 | Elastic virtual multipath resource access using sequestered partitions |
EP3084617A4 (en) * | 2013-12-19 | 2018-01-10 | Intel Corporation | Elastic virtual multipath resource access using sequestered partitions |
US9952941B2 (en) | 2013-12-19 | 2018-04-24 | Intel Corporation | Elastic virtual multipath resource access using sequestered partitions |
CN105765546B (en) * | 2013-12-19 | 2018-10-12 | 英特尔公司 | It is accessed using the elastic virtual multipath resource of the subregion of isolation |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Bernick et al. | NonStop/spl reg/advanced architecture | |
US6675192B2 (en) | Temporary halting of thread execution until monitoring of armed events to memory location identified in working registers | |
US8239518B2 (en) | Method for detecting and resolving a partition condition in a cluster | |
US5193158A (en) | Method and apparatus for exception handling in pipeline processors having mismatched instruction pipeline depths | |
US8739164B2 (en) | Automatic suspend atomic hardware transactional memory in response to detecting an implicit suspend condition and resume thereof | |
EP2332043B1 (en) | Virtualizable advanced synchronization facility | |
US6247118B1 (en) | Systems and methods for transient error recovery in reduced instruction set computer processors via instruction retry | |
CN101833475B (en) | Method and device for execution of instruction block | |
US5588111A (en) | Fault-tolerant computer system having switchable I/O bus interface modules | |
US7287135B2 (en) | Adapting RCU for real-time operating system usage | |
US6105148A (en) | Persistent state checkpoint and restoration systems | |
KR100578437B1 (en) | Mechanism for interrupt handling in computer systems that support concurrent execution of multiple threads | |
US5384906A (en) | Method and apparatus for synchronizing a plurality of processors | |
TWI266987B (en) | Method for monitoring locks, processor, system for monitoring locks, and machine-readable medium | |
US6772368B2 (en) | Multiprocessor with pair-wise high reliability mode, and method therefore | |
JP2008515055A (en) | Method and apparatus for implementing hybrid hardware and software for transactional memory access | |
US20030051190A1 (en) | Rendezvous of processors with os coordination | |
EP0447576A1 (en) | Synchronization of fault-tolerant computer system having multiple processors | |
US20090119665A1 (en) | Transitioning of virtual machine from replay mode to live mode | |
EP0516126A1 (en) | Fault tolerant multiprocessor computer system | |
KR101423480B1 (en) | Last branch record indicators for transactional memory | |
US6516429B1 (en) | Method and apparatus for run-time deconfiguration of a processor in a symmetrical multi-processing system | |
US8572044B2 (en) | Nested recovery scope management for stateless recovery agents | |
US8117403B2 (en) | Transactional memory system which employs thread assists using address history tables | |
US6151688A (en) | Resource management in a clustered computer system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
STCF | Information on status: patent grant |
Free format text: PATENTED CASE |
|
AS | Assignment |
Owner name: COMPAQ INFORMATION TECHNOLOGIES GROUP, L.P., TEXAS Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:DIGITAL EQUIPMENT CORPORATION;COMPAQ COMPUTER CORPORATION;REEL/FRAME:012447/0903;SIGNING DATES FROM 19991209 TO 20010620 |
|
FPAY | Fee payment |
Year of fee payment: 4 |
|
AS | Assignment |
Owner name: HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P., TEXAS Free format text: CHANGE OF NAME;ASSIGNOR:COMPAQ INFORMANTION TECHNOLOGIES GROUP LP;REEL/FRAME:014102/0224 Effective date: 20021001 |
|
FPAY | Fee payment |
Year of fee payment: 8 |
|
FPAY | Fee payment |
Year of fee payment: 12 |