Skip to content

Instantly share code, notes, and snippets.

@RocketRace
Created January 29, 2024 11:56
Show Gist options
  • Save RocketRace/f501ddda25f65a817f7878f09ce84f0f to your computer and use it in GitHub Desktop.
Save RocketRace/f501ddda25f65a817f7878f09ce84f0f to your computer and use it in GitHub Desktop.
This regular expression matches a single extended grapheme cluster (compliant withUAX #29 as of Unicode 15.1) from a sequence of bytes encoded as UTF-8. This can be used with any regex engine capable of matching bytes.
pattern = (
b'(?:\\\r\\\n|\\\r|\\\n)|(?:[\x00-\x08\x0e-\x1f\x7f]|(?:\\\t|\\\x0b|\\\x0c'
b')|\xc2[\x80-\x9f\xad]|\xd8\x9c|\xe1\xa0\x8e|\xe2(?:\x80[\x8b\x8e\x8f\xa8'
b'-\xae]|\x81[\xa0-\xaf])|\xef(?:\xbb\xbf|\xbf[\xb0-\xbb])|\xf0(?:\x93\x90'
b'[\xb0-\xbf]|\x9b\xb2[\xa0-\xa3]|\x9d\x85[\xb3-\xba])|\xf3\xa0(?:\x80['
b'\x80-\x9f]|[\x82\x83\x88-\xbf][\x80-\xbf]|\x87[\xb0-\xbf]))|(?:\xd8[\x80'
b'-\x85]|\xdb\x9d|\xdc\x8f|\xe0(?:\xa2[\x90\x91]|\xa3\xa2|\xb5\x8e)|\xf0'
b'\x91(?:\x82\xbd|\x83\x8d|\x87[\x82\x83]|\xa4\xbf|\xa5\x81|\xa8\xba|\xaa['
b'\x84-\x89]|\xb5\x86|\xbc\x82))*(?:(?:(?:\xe1(?:\x84[\x80-\xbf]|\x85[\x80'
b'-\x9f])|\xea\xa5[\xa0-\xbc])*(?:(?:\xe1(?:\x85[\xa0-\xbf]|\x86[\x80-\xa7'
b'])|\xed(?:\x9e[\xb0-\xbf]|\x9f[\x80-\x86]))+|(?:\xea(?:[\xb0\xb7\xbe]['
b'\x80\x9c\xb8]|[\xb1\xb8\xbf][\x94\xb0]|[\xb2\xb9][\x8c\xa8]|[\xb3\xba]['
b'\x84\xa0\xbc]|[\xb4\xbb][\x98\xb4]|[\xb5\xbc][\x90\xac]|[\xb6\xbd][\x88'
b'\xa4])|\xeb(?:[\x80\x87\x8e\x95\x9c\xa3\xaa\xb1\xb8\xbf][\x8c\xa8]|[\x81'
b'\x88\x8f\x96\x9d\xa4\xab\xb2\xb9][\x84\xa0\xbc]|[\x82\x89\x90\x97\x9e'
b'\xa5\xac\xb3\xba][\x98\xb4]|[\x83\x8a\x91\x98\x9f\xa6\xad\xb4\xbb][\x90'
b'\xac]|[\x84\x8b\x92\x99\xa0\xa7\xae\xb5\xbc][\x88\xa4]|[\x85\x8c\x93\x9a'
b'\xa1\xa8\xaf\xb6\xbd][\x80\x9c\xb8]|[\x86\x8d\x94\x9b\xa2\xa9\xb0\xb7'
b'\xbe][\x94\xb0])|\xec(?:[\x80\x87\x8e\x95\x9c\xa3\xaa\xb1\xb8\xbf][\x84'
b'\xa0\xbc]|[\x81\x88\x8f\x96\x9d\xa4\xab\xb2\xb9][\x98\xb4]|[\x82\x89\x90'
b'\x97\x9e\xa5\xac\xb3\xba][\x90\xac]|[\x83\x8a\x91\x98\x9f\xa6\xad\xb4'
b'\xbb][\x88\xa4]|[\x84\x8b\x92\x99\xa0\xa7\xae\xb5\xbc][\x80\x9c\xb8]|['
b'\x85\x8c\x93\x9a\xa1\xa8\xaf\xb6\xbd][\x94\xb0]|[\x86\x8d\x94\x9b\xa2'
b'\xa9\xb0\xb7\xbe][\x8c\xa8])|\xed(?:[\x80\x87\x8e\x95\x9c][\x98\xb4]|['
b'\x81\x88\x8f\x96\x9d][\x90\xac]|[\x82\x89\x90\x97][\x88\xa4]|[\x83\x8a'
b'\x91\x98][\x80\x9c\xb8]|[\x84\x8b\x92\x99][\x94\xb0]|[\x85\x8c\x93\x9a]['
b'\x8c\xa8]|[\x86\x8d\x94\x9b][\x84\xa0\xbc]|\x9e\x88))(?:\xe1(?:\x85[\xa0'
b'-\xbf]|\x86[\x80-\xa7])|\xed(?:\x9e[\xb0-\xbf]|\x9f[\x80-\x86]))*|(?:'
b'\xea(?:[\xb0\xb7\xbe][\x81-\x9b\x9d-\xb7\xb9-\xbf]|[\xb1\xb8\xbf][\x80-'
b'\x93\x95-\xaf\xb1-\xbf]|[\xb2\xb9][\x80-\x8b\x8d-\xa7\xa9-\xbf]|[\xb3'
b'\xba][\x80-\x83\x85-\x9f\xa1-\xbb\xbd-\xbf]|[\xb4\xbb][\x80-\x97\x99-'
b'\xb3\xb5-\xbf]|[\xb5\xbc][\x80-\x8f\x91-\xab\xad-\xbf]|[\xb6\xbd][\x80-'
b'\x87\x89-\xa3\xa5-\xbf])|\xeb(?:[\x80\x87\x8e\x95\x9c\xa3\xaa\xb1\xb8'
b'\xbf][\x80-\x8b\x8d-\xa7\xa9-\xbf]|[\x81\x88\x8f\x96\x9d\xa4\xab\xb2\xb9'
b'][\x80-\x83\x85-\x9f\xa1-\xbb\xbd-\xbf]|[\x82\x89\x90\x97\x9e\xa5\xac'
b'\xb3\xba][\x80-\x97\x99-\xb3\xb5-\xbf]|[\x83\x8a\x91\x98\x9f\xa6\xad\xb4'
b'\xbb][\x80-\x8f\x91-\xab\xad-\xbf]|[\x84\x8b\x92\x99\xa0\xa7\xae\xb5\xbc'
b'][\x80-\x87\x89-\xa3\xa5-\xbf]|[\x85\x8c\x93\x9a\xa1\xa8\xaf\xb6\xbd]['
b'\x81-\x9b\x9d-\xb7\xb9-\xbf]|[\x86\x8d\x94\x9b\xa2\xa9\xb0\xb7\xbe][\x80'
b'-\x93\x95-\xaf\xb1-\xbf])|\xec(?:[\x80\x87\x8e\x95\x9c\xa3\xaa\xb1\xb8'
b'\xbf][\x80-\x83\x85-\x9f\xa1-\xbb\xbd-\xbf]|[\x81\x88\x8f\x96\x9d\xa4'
b'\xab\xb2\xb9][\x80-\x97\x99-\xb3\xb5-\xbf]|[\x82\x89\x90\x97\x9e\xa5\xac'
b'\xb3\xba][\x80-\x8f\x91-\xab\xad-\xbf]|[\x83\x8a\x91\x98\x9f\xa6\xad\xb4'
b'\xbb][\x80-\x87\x89-\xa3\xa5-\xbf]|[\x84\x8b\x92\x99\xa0\xa7\xae\xb5\xbc'
b'][\x81-\x9b\x9d-\xb7\xb9-\xbf]|[\x85\x8c\x93\x9a\xa1\xa8\xaf\xb6\xbd]['
b'\x80-\x93\x95-\xaf\xb1-\xbf]|[\x86\x8d\x94\x9b\xa2\xa9\xb0\xb7\xbe][\x80'
b'-\x8b\x8d-\xa7\xa9-\xbf])|\xed(?:[\x80\x87\x8e\x95\x9c][\x80-\x97\x99-'
b'\xb3\xb5-\xbf]|[\x81\x88\x8f\x96\x9d][\x80-\x8f\x91-\xab\xad-\xbf]|[\x82'
b'\x89\x90\x97][\x80-\x87\x89-\xa3\xa5-\xbf]|[\x83\x8a\x91\x98][\x81-\x9b'
b'\x9d-\xb7\xb9-\xbf]|[\x84\x8b\x92\x99][\x80-\x93\x95-\xaf\xb1-\xbf]|['
b'\x85\x8c\x93\x9a][\x80-\x8b\x8d-\xa7\xa9-\xbf]|[\x86\x8d\x94\x9b][\x80-'
b'\x83\x85-\x9f\xa1-\xbb\xbd-\xbf]|\x9e[\x80-\x87\x89-\xa3])))(?:\xe1(?:'
b'\x86[\xa8-\xbf]|\x87[\x80-\xbf])|\xed\x9f[\x8b-\xbb])*|(?:\xe1(?:\x84['
b'\x80-\xbf]|\x85[\x80-\x9f])|\xea\xa5[\xa0-\xbc])+|(?:\xe1(?:\x86[\xa8-'
b'\xbf]|\x87[\x80-\xbf])|\xed\x9f[\x8b-\xbb])+)|(?:\xf0\x9f\x87[\xa6-\xbf]'
b'\xf0\x9f\x87[\xa6-\xbf])|(?:(?:\xc2[\xa9\xae]|\xe2(?:\x80\xbc|\x81\x89|'
b'\x84[\xa2\xb9]|\x86[\x94-\x99\xa9\xaa]|\x8c[\x9a\x9b\xa8]|\x8e\x88|\x8f['
b'\x8f\xa9-\xb3\xb8-\xba]|\x93\x82|\x96[\xaa\xab\xb6]|\x97[\x80\xbb-\xbe]|'
b'\x98[\x80-\x85\x87-\x92\x94-\xbf]|[\x99\x9b][\x80-\xbf]|\x9a[\x80-\x85'
b'\x90-\xbf]|\x9c[\x80-\x85\x88-\x92\x94\x96\x9d\xa1\xa8\xb3\xb4]|\x9d['
b'\x84\x87\x8c\x8e\x93-\x95\x97\xa3-\xa7]|\x9e[\x95-\x97\xa1\xb0\xbf]|\xa4'
b'[\xb4\xb5]|\xac[\x85-\x87\x9b\x9c]|\xad[\x90\x95])|\xe3(?:\x80[\xb0\xbd]'
b'|\x8a[\x97\x99])|\xf0\x9f(?:[\x80-\x83\x8a-\x8e\x90-\x93\x96-\x98\x9a'
b'\x9b\xa3\xa6-\xab\xb0-\xbe][\x80-\xbf]|\x84[\x8d-\x8f\xaf]|\x85[\xac-'
b'\xb1\xbe\xbf]|\x86[\x8e\x91-\x9a\xad-\xbf]|\x87[\x80-\xa5]|\x88[\x81-'
b'\x8f\x9a\xaf\xb2-\xba\xbc-\xbf]|\x89[\x89-\xbf]|\x8f[\x80-\xba]|[\x94'
b'\xbf][\x80-\xbd]|\x95[\x86-\xbf]|\x99[\x80-\x8f]|\x9d[\xb4-\xbf]|\x9f['
b'\x95-\xbf]|\xa0[\x8c-\x8f]|\xa1[\x88-\x8f\x9a-\x9f]|\xa2[\x88-\x8f\xae-'
b'\xbf]|\xa4[\x8c-\xba\xbc-\xbf]|\xa5[\x80-\x85\x87-\xbf]))(?:(?:\xcc[\x80'
b'-\xbf]|\xcd[\x80-\xaf]|\xd2[\x83-\x89]|\xd6[\x91-\xbd\xbf]|\xd7[\x81\x82'
b'\x84\x85\x87]|\xd8[\x90-\x9a]|\xd9[\x8b-\x9f\xb0]|\xdb[\x96-\x9c\x9f-'
b'\xa4\xa7\xa8\xaa-\xad]|\xdc[\x91\xb0-\xbf]|\xdd[\x80-\x8a]|\xde[\xa6-'
b'\xb0]|\xdf[\xab-\xb3\xbd]|\xe0(?:\xa0[\x96-\x99\x9b-\xa3\xa5-\xa7\xa9-'
b'\xad]|\xa1[\x99-\x9b]|\xa2[\x98-\x9f]|\xa3[\x8a-\xa1\xa3-\xbf]|\xa4[\x80'
b'-\x82\xba\xbc]|\xa5[\x81-\x88\x8d\x91-\x97\xa2\xa3]|\xa6[\x81\xbc\xbe]|'
b'\xa7[\x81-\x84\x8d\x97\xa2\xa3\xbe]|[\xa8\xaa][\x81\x82\xbc]|\xa9[\x81'
b'\x82\x87\x88\x8b-\x8d\x91\xb0\xb1\xb5]|\xab[\x81-\x85\x87\x88\x8d\xa2'
b'\xa3\xba-\xbf]|\xac[\x81\xbc\xbe\xbf]|\xad[\x81-\x84\x8d\x95-\x97\xa2'
b'\xa3]|\xae[\x82\xbe]|\xaf[\x80\x8d\x97]|\xb0[\x80\x84\xbc\xbe\xbf]|\xb1['
b'\x80\x86-\x88\x8a-\x8d\x95\x96\xa2\xa3]|\xb2[\x81\xbc\xbf]|\xb3[\x82\x86'
b'\x8c\x8d\x95\x96\xa2\xa3]|\xb4[\x80\x81\xbb\xbc\xbe]|\xb5[\x81-\x84\x8d'
b'\x97\xa2\xa3]|\xb6\x81|\xb7[\x8a\x8f\x92-\x94\x96\x9f]|\xb8[\xb1\xb4-'
b'\xba]|\xb9[\x87-\x8e]|\xba[\xb1\xb4-\xbc]|\xbb[\x88-\x8e]|\xbc[\x98\x99'
b'\xb5\xb7\xb9]|\xbd[\xb1-\xbe]|\xbe[\x80-\x84\x86\x87\x8d-\x97\x99-\xbc]|'
b'\xbf\x86)|\xe1(?:\x80[\xad-\xb0\xb2-\xb7\xb9\xba\xbd\xbe]|\x81[\x98\x99'
b'\x9e-\xa0\xb1-\xb4]|\x82[\x82\x85\x86\x8d\x9d]|\x8d[\x9d-\x9f]|\x9c[\x92'
b'-\x94\xb2\xb3]|\x9d[\x92\x93\xb2\xb3]|\x9e[\xb4\xb5\xb7-\xbd]|\x9f[\x86'
b'\x89-\x93\x9d]|\xa0[\x8b-\x8d\x8f]|\xa2[\x85\x86\xa9]|\xa4[\xa0-\xa2\xa7'
b'\xa8\xb2\xb9-\xbb]|\xa8[\x97\x98\x9b]|\xa9[\x96\x98-\x9e\xa0\xa2\xa5-'
b'\xac\xb3-\xbc\xbf]|\xaa[\xb0-\xbf]|\xab[\x80-\x8e]|\xac[\x80-\x83\xb4-'
b'\xba\xbc]|\xad[\x82\xab-\xb3]|\xae[\x80\x81\xa2-\xa5\xa8\xa9\xab-\xad]|'
b'\xaf[\xa6\xa8\xa9\xad\xaf-\xb1]|\xb0[\xac-\xb3\xb6\xb7]|\xb3[\x90-\x92'
b'\x94-\xa0\xa2-\xa8\xad\xb4\xb8\xb9]|\xb7[\x80-\xbf])|\xe2(?:\x80\x8c|'
b'\x83[\x90-\xb0]|\xb3[\xaf-\xb1]|\xb5\xbf|\xb7[\xa0-\xbf])|\xe3(?:\x80['
b'\xaa-\xaf]|\x82[\x99\x9a])|\xea(?:\x99[\xaf-\xb2\xb4-\xbd]|\x9a[\x9e\x9f'
b']|\x9b[\xb0\xb1]|\xa0[\x82\x86\x8b\xa5\xa6\xac]|\xa3[\x84\x85\xa0-\xb1'
b'\xbf]|\xa4[\xa6-\xad]|\xa5[\x87-\x91]|\xa6[\x80-\x82\xb3\xb6-\xb9\xbc'
b'\xbd]|\xa7\xa5|\xa8[\xa9-\xae\xb1\xb2\xb5\xb6]|\xa9[\x83\x8c\xbc]|\xaa['
b'\xb0\xb2-\xb4\xb7\xb8\xbe\xbf]|\xab[\x81\xac\xad\xb6]|\xaf[\xa5\xa8\xad]'
b')|\xef(?:\xac\x9e|\xb8[\x80-\x8f\xa0-\xaf]|\xbe[\x9e\x9f])|\xf0(?:\x90(?'
b':\x87\xbd|\x8b\xa0|\x8d[\xb6-\xba]|\xa8[\x81-\x83\x85\x86\x8c-\x8f\xb8-'
b'\xba\xbf]|\xab[\xa5\xa6]|\xb4[\xa4-\xa7]|\xba[\xab\xac]|\xbb[\xbd-\xbf]|'
b'\xbd[\x86-\x90]|\xbe[\x82-\x85])|\x91(?:\x80[\x81\xb8-\xbf]|\x81[\x80-'
b'\x86\xb0\xb3\xb4\xbf]|\x82[\x80\x81\xb3-\xb6\xb9\xba]|\x83\x82|\x84[\x80'
b'-\x82\xa7-\xab\xad-\xb4]|\x85\xb3|\x86[\x80\x81\xb6-\xbe]|\x87[\x89-\x8c'
b'\x8f]|\x88[\xaf-\xb1\xb4\xb6\xb7\xbe]|\x89\x81|\x8b[\x9f\xa3-\xaa]|\x8c['
b'\x80\x81\xbb\xbc\xbe]|\x8d[\x80\x97\xa6-\xac\xb0-\xb4]|\x90[\xb8-\xbf]|'
b'\x91[\x82-\x84\x86\x9e]|\x92[\xb0\xb3-\xb8\xba\xbd\xbf]|\x93[\x80\x82'
b'\x83]|\x96[\xaf\xb2-\xb5\xbc\xbd\xbf]|\x97[\x80\x9c\x9d]|\x98[\xb3-\xba'
b'\xbd\xbf]|\x99\x80|\x9a[\xab\xad\xb0-\xb5\xb7]|\x9c[\x9d-\x9f\xa2-\xa5'
b'\xa7-\xab]|\xa0[\xaf-\xb7\xb9\xba]|\xa4[\xb0\xbb\xbc\xbe]|\xa5\x83|\xa7['
b'\x94-\x97\x9a\x9b\xa0]|\xa8[\x81-\x8a\xb3-\xb8\xbb-\xbe]|\xa9[\x87\x91-'
b'\x96\x99-\x9b]|\xaa[\x8a-\x96\x98\x99]|\xb0[\xb0-\xb6\xb8-\xbd\xbf]|\xb2'
b'[\x92-\xa7\xaa-\xb0\xb2\xb3\xb5\xb6]|\xb4[\xb1-\xb6\xba\xbc\xbd\xbf]|'
b'\xb5[\x80-\x85\x87]|\xb6[\x90\x91\x95\x97]|\xbb[\xb3\xb4]|\xbc[\x80\x81'
b'\xb6-\xba]|\xbd[\x80\x82])|\x93\x91[\x80\x87-\x95]|\x96(?:\xab[\xb0-\xb4'
b']|\xac[\xb0-\xb6]|\xbd\x8f|\xbe[\x8f-\x92]|\xbf\xa4)|\x9b\xb2[\x9d\x9e]|'
b'\x9c(?:\xbc[\x80-\xad\xb0-\xbf]|\xbd[\x80-\x86])|\x9d(?:\x85[\xa5\xa7-'
b'\xa9\xae-\xb2\xbb-\xbf]|\x86[\x80-\x82\x85-\x8b\xaa-\xad]|\x89[\x82-\x84'
b']|\xa8[\x80-\xb6\xbb-\xbf]|\xa9[\x80-\xac\xb5]|\xaa[\x84\x9b-\x9f\xa1-'
b'\xaf])|\x9e(?:\x80[\x80-\x86\x88-\x98\x9b-\xa1\xa3\xa4\xa6-\xaa]|\x82'
b'\x8f|\x84[\xb0-\xb6]|\x8a\xae|[\x8b\x93][\xac-\xaf]|\xa3[\x90-\x96]|\xa5'
b'[\x84-\x8a])|\x9f\x8f[\xbb-\xbf])|\xf3\xa0(?:\x80[\xa0-\xbf]|[\x81\x84-'
b'\x86][\x80-\xbf]|\x87[\x80-\xaf]))*\xe2\x80\x8d(?:\xc2[\xa9\xae]|\xe2(?:'
b'\x80\xbc|\x81\x89|\x84[\xa2\xb9]|\x86[\x94-\x99\xa9\xaa]|\x8c[\x9a\x9b'
b'\xa8]|\x8e\x88|\x8f[\x8f\xa9-\xb3\xb8-\xba]|\x93\x82|\x96[\xaa\xab\xb6]|'
b'\x97[\x80\xbb-\xbe]|\x98[\x80-\x85\x87-\x92\x94-\xbf]|[\x99\x9b][\x80-'
b'\xbf]|\x9a[\x80-\x85\x90-\xbf]|\x9c[\x80-\x85\x88-\x92\x94\x96\x9d\xa1'
b'\xa8\xb3\xb4]|\x9d[\x84\x87\x8c\x8e\x93-\x95\x97\xa3-\xa7]|\x9e[\x95-'
b'\x97\xa1\xb0\xbf]|\xa4[\xb4\xb5]|\xac[\x85-\x87\x9b\x9c]|\xad[\x90\x95])'
b'|\xe3(?:\x80[\xb0\xbd]|\x8a[\x97\x99])|\xf0\x9f(?:[\x80-\x83\x8a-\x8e'
b'\x90-\x93\x96-\x98\x9a\x9b\xa3\xa6-\xab\xb0-\xbe][\x80-\xbf]|\x84[\x8d-'
b'\x8f\xaf]|\x85[\xac-\xb1\xbe\xbf]|\x86[\x8e\x91-\x9a\xad-\xbf]|\x87[\x80'
b'-\xa5]|\x88[\x81-\x8f\x9a\xaf\xb2-\xba\xbc-\xbf]|\x89[\x89-\xbf]|\x8f['
b'\x80-\xba]|[\x94\xbf][\x80-\xbd]|\x95[\x86-\xbf]|\x99[\x80-\x8f]|\x9d['
b'\xb4-\xbf]|\x9f[\x95-\xbf]|\xa0[\x8c-\x8f]|\xa1[\x88-\x8f\x9a-\x9f]|\xa2'
b'[\x88-\x8f\xae-\xbf]|\xa4[\x8c-\xba\xbc-\xbf]|\xa5[\x80-\x85\x87-\xbf]))'
b')*)|(?:\xe0(?:\xa4[\x95-\xb9]|\xa5[\x98-\x9f\xb8-\xbf]|\xa6[\x95-\xa8'
b'\xaa-\xb0\xb2\xb6-\xb9]|\xa7[\x9c\x9d\x9f\xb0\xb1]|[\xaa\xac][\x95-\xa8'
b'\xaa-\xb0\xb2\xb3\xb5-\xb9]|\xab\xb9|\xad[\x9c\x9d\x9f\xb1]|\xb0[\x95-'
b'\xa8\xaa-\xb9]|\xb1[\x98-\x9a]|\xb4[\x95-\xba])(?:(?:(?:\xcc[\x80-\xbf]|'
b'\xcd[\x80-\x8e\x90-\xaf]|\xd2[\x83-\x87]|\xd6[\x91-\xbd\xbf]|\xd7[\x81'
b'\x82\x84\x85\x87]|\xd8[\x90-\x9a]|\xd9[\x8b-\x9f\xb0]|\xdb[\x96-\x9c\x9f'
b'-\xa4\xa7\xa8\xaa-\xad]|\xdc[\x91\xb0-\xbf]|\xdd[\x80-\x8a]|\xdf[\xab-'
b'\xb3\xbd]|\xe0(?:\xa0[\x96-\x99\x9b-\xa3\xa5-\xa7\xa9-\xad]|\xa1[\x99-'
b'\x9b]|\xa2[\x98-\x9f]|\xa3[\x8a-\xa1\xa3-\xbf]|[\xa4\xa6\xa8\xaa\xac\xb0'
b'\xb2]\xbc|\xa5[\x91-\x94]|\xa7\xbe|\xb1[\x95\x96]|\xb4[\xbb\xbc]|[\xb8'
b'\xba][\xb8-\xba]|[\xb9\xbb][\x88-\x8b]|\xbc[\x98\x99\xb5\xb7\xb9]|\xbd['
b'\xb1\xb2\xb4\xba-\xbd]|\xbe[\x80\x82-\x84\x86\x87]|\xbf\x86)|\xe1(?:\x80'
b'[\xb7\xb9\xba]|\x82\x8d|\x8d[\x9d-\x9f]|\x9c\x94|\x9f[\x92\x9d]|\xa2\xa9'
b'|\xa4[\xb9-\xbb]|\xa8[\x97\x98]|\xa9[\xa0\xb5-\xbc\xbf]|\xaa[\xb0-\xbd'
b'\xbf]|\xab[\x80-\x8e]|\xac\xb4|\xad[\xab-\xb3]|\xae\xab|\xaf\xa6|\xb0'
b'\xb7|\xb3[\x90-\x92\x94-\xa0\xa2-\xa8\xad\xb4\xb8\xb9]|\xb7[\x80-\xbf])|'
b'\xe2(?:\x80\x8d|\x83[\x90-\x9c\xa1\xa5-\xb0]|\xb3[\xaf-\xb1]|\xb5\xbf|'
b'\xb7[\xa0-\xbf])|\xe3(?:\x80[\xaa-\xaf]|\x82[\x99\x9a])|\xea(?:\x99[\xaf'
b'\xb4-\xbd]|\x9a[\x9e\x9f]|\x9b[\xb0\xb1]|\xa0\xac|\xa3[\xa0-\xb1]|\xa4['
b'\xab-\xad]|\xa6\xb3|\xaa[\xb0\xb2-\xb4\xb7\xb8\xbe\xbf]|\xab[\x81\xb6]|'
b'\xaf\xad)|\xef(?:\xac\x9e|\xb8[\xa0-\xaf])|\xf0(?:\x90(?:\x87\xbd|\x8b'
b'\xa0|\x8d[\xb6-\xba]|\xa8[\x8d\x8f\xb8-\xba\xbf]|\xab[\xa5\xa6]|\xb4['
b'\xa4-\xa7]|\xba[\xab\xac]|\xbb[\xbd-\xbf]|\xbd[\x86-\x90]|\xbe[\x82-\x85'
b'])|\x91(?:\x81[\xb0\xbf]|[\x82\xa0]\xba|\x84[\x80-\x82\xb3\xb4]|\x85\xb3'
b'|\x87\x8a|\x88\xb6|\x8b[\xa9\xaa]|\x8c[\xbb\xbc]|\x8d[\xa6-\xac\xb0-\xb4'
b']|\x91[\x86\x9e]|[\x93\xa5]\x83|\x97\x80|\x9a\xb7|\x9c\xab|\xa4\xbe|\xa8'
b'\xb4|\xa9\x87|\xaa\x99|\xb5[\x82\x84\x85]|\xb6\x97|\xbd\x82)|\x96(?:\xab'
b'[\xb0-\xb4]|\xac[\xb0-\xb6])|\x9b\xb2\x9e|\x9d(?:\x85[\xa5\xa7-\xa9\xae-'
b'\xb2\xbb-\xbf]|\x86[\x80-\x82\x85-\x8b\xaa-\xad]|\x89[\x82-\x84])|\x9e(?'
b':\x80[\x80-\x86\x88-\x98\x9b-\xa1\xa3\xa4\xa6-\xaa]|\x82\x8f|\x84[\xb0-'
b'\xb6]|\x8a\xae|[\x8b\x93][\xac-\xaf]|\xa3[\x90-\x96]|\xa5[\x84-\x8a])))|'
b'\xe0(?:[\xa5\xa7\xab\xad\xb1\xb5]\x8d))*\xe0(?:[\xa5\xa7\xab\xad\xb1\xb5'
b']\x8d)(?:(?:\xcc[\x80-\xbf]|\xcd[\x80-\x8e\x90-\xaf]|\xd2[\x83-\x87]|'
b'\xd6[\x91-\xbd\xbf]|\xd7[\x81\x82\x84\x85\x87]|\xd8[\x90-\x9a]|\xd9[\x8b'
b'-\x9f\xb0]|\xdb[\x96-\x9c\x9f-\xa4\xa7\xa8\xaa-\xad]|\xdc[\x91\xb0-\xbf]'
b'|\xdd[\x80-\x8a]|\xdf[\xab-\xb3\xbd]|\xe0(?:\xa0[\x96-\x99\x9b-\xa3\xa5-'
b'\xa7\xa9-\xad]|\xa1[\x99-\x9b]|\xa2[\x98-\x9f]|\xa3[\x8a-\xa1\xa3-\xbf]|'
b'[\xa4\xa6\xa8\xaa\xac\xb0\xb2]\xbc|\xa5[\x91-\x94]|\xa7\xbe|\xb1[\x95'
b'\x96]|\xb4[\xbb\xbc]|[\xb8\xba][\xb8-\xba]|[\xb9\xbb][\x88-\x8b]|\xbc['
b'\x98\x99\xb5\xb7\xb9]|\xbd[\xb1\xb2\xb4\xba-\xbd]|\xbe[\x80\x82-\x84\x86'
b'\x87]|\xbf\x86)|\xe1(?:\x80[\xb7\xb9\xba]|\x82\x8d|\x8d[\x9d-\x9f]|\x9c'
b'\x94|\x9f[\x92\x9d]|\xa2\xa9|\xa4[\xb9-\xbb]|\xa8[\x97\x98]|\xa9[\xa0'
b'\xb5-\xbc\xbf]|\xaa[\xb0-\xbd\xbf]|\xab[\x80-\x8e]|\xac\xb4|\xad[\xab-'
b'\xb3]|\xae\xab|\xaf\xa6|\xb0\xb7|\xb3[\x90-\x92\x94-\xa0\xa2-\xa8\xad'
b'\xb4\xb8\xb9]|\xb7[\x80-\xbf])|\xe2(?:\x80\x8d|\x83[\x90-\x9c\xa1\xa5-'
b'\xb0]|\xb3[\xaf-\xb1]|\xb5\xbf|\xb7[\xa0-\xbf])|\xe3(?:\x80[\xaa-\xaf]|'
b'\x82[\x99\x9a])|\xea(?:\x99[\xaf\xb4-\xbd]|\x9a[\x9e\x9f]|\x9b[\xb0\xb1]'
b'|\xa0\xac|\xa3[\xa0-\xb1]|\xa4[\xab-\xad]|\xa6\xb3|\xaa[\xb0\xb2-\xb4'
b'\xb7\xb8\xbe\xbf]|\xab[\x81\xb6]|\xaf\xad)|\xef(?:\xac\x9e|\xb8[\xa0-'
b'\xaf])|\xf0(?:\x90(?:\x87\xbd|\x8b\xa0|\x8d[\xb6-\xba]|\xa8[\x8d\x8f\xb8'
b'-\xba\xbf]|\xab[\xa5\xa6]|\xb4[\xa4-\xa7]|\xba[\xab\xac]|\xbb[\xbd-\xbf]'
b'|\xbd[\x86-\x90]|\xbe[\x82-\x85])|\x91(?:\x81[\xb0\xbf]|[\x82\xa0]\xba|'
b'\x84[\x80-\x82\xb3\xb4]|\x85\xb3|\x87\x8a|\x88\xb6|\x8b[\xa9\xaa]|\x8c['
b'\xbb\xbc]|\x8d[\xa6-\xac\xb0-\xb4]|\x91[\x86\x9e]|[\x93\xa5]\x83|\x97'
b'\x80|\x9a\xb7|\x9c\xab|\xa4\xbe|\xa8\xb4|\xa9\x87|\xaa\x99|\xb5[\x82\x84'
b'\x85]|\xb6\x97|\xbd\x82)|\x96(?:\xab[\xb0-\xb4]|\xac[\xb0-\xb6])|\x9b'
b'\xb2\x9e|\x9d(?:\x85[\xa5\xa7-\xa9\xae-\xb2\xbb-\xbf]|\x86[\x80-\x82\x85'
b'-\x8b\xaa-\xad]|\x89[\x82-\x84])|\x9e(?:\x80[\x80-\x86\x88-\x98\x9b-\xa1'
b'\xa3\xa4\xa6-\xaa]|\x82\x8f|\x84[\xb0-\xb6]|\x8a\xae|[\x8b\x93][\xac-'
b'\xaf]|\xa3[\x90-\x96]|\xa5[\x84-\x8a])))|\xe0(?:[\xa5\xa7\xab\xad\xb1'
b'\xb5]\x8d))*\xe0(?:\xa4[\x95-\xb9]|\xa5[\x98-\x9f\xb8-\xbf]|\xa6[\x95-'
b'\xa8\xaa-\xb0\xb2\xb6-\xb9]|\xa7[\x9c\x9d\x9f\xb0\xb1]|[\xaa\xac][\x95-'
b'\xa8\xaa-\xb0\xb2\xb3\xb5-\xb9]|\xab\xb9|\xad[\x9c\x9d\x9f\xb1]|\xb0['
b'\x95-\xa8\xaa-\xb9]|\xb1[\x98-\x9a]|\xb4[\x95-\xba]))+)|(?:[!"%\',/->@-Z'
b'_-z]|(?:\\ |\\#|\\$|\\&|\\(|\\)|\\*|\\+|\\-|\\.|\\?|\\[|\\\\|\\]|\\^|\\{'
b'|\\||\\}|\\~)|\xc2[\xa0-\xac\xae-\xbf]|[\xc3-\xd7\xd9-\xdf][\x80-\xbf]|'
b'\xd8[\x80-\x9b\x9d-\xbf]|\xe0(?:[\xa0-\xbf][\x80-\xbf])|\xe1(?:[\x80-'
b'\x9f\xa1-\xbf][\x80-\xbf]|\xa0[\x80-\x8d\x8f-\xbf])|\xe2(?:\x80[\x80-'
b'\x8a\x8c\x8d\x90-\xa7\xaf-\xbf]|\x81[\x80-\x9f\xb0-\xbf]|[\x82-\xbf]['
b'\x80-\xbf])|[\xe3-\xec\xee](?:[\x80-\xbf][\x80-\xbf])|\xed(?:[\x80-\x9f]'
b'[\x80-\xbf])|\xef(?:[\x80-\xba\xbc-\xbe][\x80-\xbf]|\xbb[\x80-\xbe]|\xbf'
b'[\x80-\xaf\xbc-\xbf])|\xf0(?:[\x90-\x92\x94-\x9a\x9c\x9e-\xbf](?:[\x80-'
b'\xbf][\x80-\xbf])|\x93(?:[\x80-\x8f\x91-\xbf][\x80-\xbf]|\x90[\x80-\xaf]'
b')|\x9b(?:[\x80-\xb1\xb3-\xbf][\x80-\xbf]|\xb2[\x80-\x9f\xa4-\xbf])|\x9d('
b'?:[\x80-\x84\x86-\xbf][\x80-\xbf]|\x85[\x80-\xb2\xbb-\xbf]))|[\xf1\xf2]('
b'?:[\x80-\xbf](?:[\x80-\xbf][\x80-\xbf]))|\xf3(?:[\x80-\x9f\xa1-\xbf](?:['
b'\x80-\xbf][\x80-\xbf])|\xa0(?:\x80[\xa0-\xbf]|[\x81\x84-\x86][\x80-\xbf]'
b'|\x87[\x80-\xaf]))|\xf4(?:[\x80-\x8f](?:[\x80-\xbf][\x80-\xbf]))))(?:(?:'
b'\xcc[\x80-\xbf]|\xcd[\x80-\xaf]|\xd2[\x83-\x89]|\xd6[\x91-\xbd\xbf]|\xd7'
b'[\x81\x82\x84\x85\x87]|\xd8[\x90-\x9a]|\xd9[\x8b-\x9f\xb0]|\xdb[\x96-'
b'\x9c\x9f-\xa4\xa7\xa8\xaa-\xad]|\xdc[\x91\xb0-\xbf]|\xdd[\x80-\x8a]|\xde'
b'[\xa6-\xb0]|\xdf[\xab-\xb3\xbd]|\xe0(?:\xa0[\x96-\x99\x9b-\xa3\xa5-\xa7'
b'\xa9-\xad]|\xa1[\x99-\x9b]|\xa2[\x98-\x9f]|\xa3[\x8a-\xa1\xa3-\xbf]|\xa4'
b'[\x80-\x82\xba\xbc]|\xa5[\x81-\x88\x8d\x91-\x97\xa2\xa3]|\xa6[\x81\xbc'
b'\xbe]|\xa7[\x81-\x84\x8d\x97\xa2\xa3\xbe]|[\xa8\xaa][\x81\x82\xbc]|\xa9['
b'\x81\x82\x87\x88\x8b-\x8d\x91\xb0\xb1\xb5]|\xab[\x81-\x85\x87\x88\x8d'
b'\xa2\xa3\xba-\xbf]|\xac[\x81\xbc\xbe\xbf]|\xad[\x81-\x84\x8d\x95-\x97'
b'\xa2\xa3]|\xae[\x82\xbe]|\xaf[\x80\x8d\x97]|\xb0[\x80\x84\xbc\xbe\xbf]|'
b'\xb1[\x80\x86-\x88\x8a-\x8d\x95\x96\xa2\xa3]|\xb2[\x81\xbc\xbf]|\xb3['
b'\x82\x86\x8c\x8d\x95\x96\xa2\xa3]|\xb4[\x80\x81\xbb\xbc\xbe]|\xb5[\x81-'
b'\x84\x8d\x97\xa2\xa3]|\xb6\x81|\xb7[\x8a\x8f\x92-\x94\x96\x9f]|\xb8[\xb1'
b'\xb4-\xba]|\xb9[\x87-\x8e]|\xba[\xb1\xb4-\xbc]|\xbb[\x88-\x8e]|\xbc[\x98'
b'\x99\xb5\xb7\xb9]|\xbd[\xb1-\xbe]|\xbe[\x80-\x84\x86\x87\x8d-\x97\x99-'
b'\xbc]|\xbf\x86)|\xe1(?:\x80[\xad-\xb0\xb2-\xb7\xb9\xba\xbd\xbe]|\x81['
b'\x98\x99\x9e-\xa0\xb1-\xb4]|\x82[\x82\x85\x86\x8d\x9d]|\x8d[\x9d-\x9f]|'
b'\x9c[\x92-\x94\xb2\xb3]|\x9d[\x92\x93\xb2\xb3]|\x9e[\xb4\xb5\xb7-\xbd]|'
b'\x9f[\x86\x89-\x93\x9d]|\xa0[\x8b-\x8d\x8f]|\xa2[\x85\x86\xa9]|\xa4[\xa0'
b'-\xa2\xa7\xa8\xb2\xb9-\xbb]|\xa8[\x97\x98\x9b]|\xa9[\x96\x98-\x9e\xa0'
b'\xa2\xa5-\xac\xb3-\xbc\xbf]|\xaa[\xb0-\xbf]|\xab[\x80-\x8e]|\xac[\x80-'
b'\x83\xb4-\xba\xbc]|\xad[\x82\xab-\xb3]|\xae[\x80\x81\xa2-\xa5\xa8\xa9'
b'\xab-\xad]|\xaf[\xa6\xa8\xa9\xad\xaf-\xb1]|\xb0[\xac-\xb3\xb6\xb7]|\xb3['
b'\x90-\x92\x94-\xa0\xa2-\xa8\xad\xb4\xb8\xb9]|\xb7[\x80-\xbf])|\xe2(?:'
b'\x80\x8c|\x83[\x90-\xb0]|\xb3[\xaf-\xb1]|\xb5\xbf|\xb7[\xa0-\xbf])|\xe3('
b'?:\x80[\xaa-\xaf]|\x82[\x99\x9a])|\xea(?:\x99[\xaf-\xb2\xb4-\xbd]|\x9a['
b'\x9e\x9f]|\x9b[\xb0\xb1]|\xa0[\x82\x86\x8b\xa5\xa6\xac]|\xa3[\x84\x85'
b'\xa0-\xb1\xbf]|\xa4[\xa6-\xad]|\xa5[\x87-\x91]|\xa6[\x80-\x82\xb3\xb6-'
b'\xb9\xbc\xbd]|\xa7\xa5|\xa8[\xa9-\xae\xb1\xb2\xb5\xb6]|\xa9[\x83\x8c\xbc'
b']|\xaa[\xb0\xb2-\xb4\xb7\xb8\xbe\xbf]|\xab[\x81\xac\xad\xb6]|\xaf[\xa5'
b'\xa8\xad])|\xef(?:\xac\x9e|\xb8[\x80-\x8f\xa0-\xaf]|\xbe[\x9e\x9f])|\xf0'
b'(?:\x90(?:\x87\xbd|\x8b\xa0|\x8d[\xb6-\xba]|\xa8[\x81-\x83\x85\x86\x8c-'
b'\x8f\xb8-\xba\xbf]|\xab[\xa5\xa6]|\xb4[\xa4-\xa7]|\xba[\xab\xac]|\xbb['
b'\xbd-\xbf]|\xbd[\x86-\x90]|\xbe[\x82-\x85])|\x91(?:\x80[\x81\xb8-\xbf]|'
b'\x81[\x80-\x86\xb0\xb3\xb4\xbf]|\x82[\x80\x81\xb3-\xb6\xb9\xba]|\x83\x82'
b'|\x84[\x80-\x82\xa7-\xab\xad-\xb4]|\x85\xb3|\x86[\x80\x81\xb6-\xbe]|\x87'
b'[\x89-\x8c\x8f]|\x88[\xaf-\xb1\xb4\xb6\xb7\xbe]|\x89\x81|\x8b[\x9f\xa3-'
b'\xaa]|\x8c[\x80\x81\xbb\xbc\xbe]|\x8d[\x80\x97\xa6-\xac\xb0-\xb4]|\x90['
b'\xb8-\xbf]|\x91[\x82-\x84\x86\x9e]|\x92[\xb0\xb3-\xb8\xba\xbd\xbf]|\x93['
b'\x80\x82\x83]|\x96[\xaf\xb2-\xb5\xbc\xbd\xbf]|\x97[\x80\x9c\x9d]|\x98['
b'\xb3-\xba\xbd\xbf]|\x99\x80|\x9a[\xab\xad\xb0-\xb5\xb7]|\x9c[\x9d-\x9f'
b'\xa2-\xa5\xa7-\xab]|\xa0[\xaf-\xb7\xb9\xba]|\xa4[\xb0\xbb\xbc\xbe]|\xa5'
b'\x83|\xa7[\x94-\x97\x9a\x9b\xa0]|\xa8[\x81-\x8a\xb3-\xb8\xbb-\xbe]|\xa9['
b'\x87\x91-\x96\x99-\x9b]|\xaa[\x8a-\x96\x98\x99]|\xb0[\xb0-\xb6\xb8-\xbd'
b'\xbf]|\xb2[\x92-\xa7\xaa-\xb0\xb2\xb3\xb5\xb6]|\xb4[\xb1-\xb6\xba\xbc'
b'\xbd\xbf]|\xb5[\x80-\x85\x87]|\xb6[\x90\x91\x95\x97]|\xbb[\xb3\xb4]|\xbc'
b'[\x80\x81\xb6-\xba]|\xbd[\x80\x82])|\x93\x91[\x80\x87-\x95]|\x96(?:\xab['
b'\xb0-\xb4]|\xac[\xb0-\xb6]|\xbd\x8f|\xbe[\x8f-\x92]|\xbf\xa4)|\x9b\xb2['
b'\x9d\x9e]|\x9c(?:\xbc[\x80-\xad\xb0-\xbf]|\xbd[\x80-\x86])|\x9d(?:\x85['
b'\xa5\xa7-\xa9\xae-\xb2\xbb-\xbf]|\x86[\x80-\x82\x85-\x8b\xaa-\xad]|\x89['
b'\x82-\x84]|\xa8[\x80-\xb6\xbb-\xbf]|\xa9[\x80-\xac\xb5]|\xaa[\x84\x9b-'
b'\x9f\xa1-\xaf])|\x9e(?:\x80[\x80-\x86\x88-\x98\x9b-\xa1\xa3\xa4\xa6-\xaa'
b']|\x82\x8f|\x84[\xb0-\xb6]|\x8a\xae|[\x8b\x93][\xac-\xaf]|\xa3[\x90-\x96'
b']|\xa5[\x84-\x8a])|\x9f\x8f[\xbb-\xbf])|\xf3\xa0(?:\x80[\xa0-\xbf]|[\x81'
b'\x84-\x86][\x80-\xbf]|\x87[\x80-\xaf]))|\xe2\x80\x8d|(?:\xe0(?:\xa4[\x83'
b'\xbb\xbe\xbf]|\xa5[\x80\x89-\x8c\x8e\x8f]|[\xa6\xb4][\x82\x83\xbf]|[\xa7'
b'\xad][\x80\x87\x88\x8b\x8c]|[\xa8\xaa][\x83\xbe\xbf]|\xa9\x80|\xab[\x80'
b'\x89\x8b\x8c]|[\xac\xb6][\x82\x83]|[\xae\xbd]\xbf|\xaf[\x81\x82\x86-\x88'
b'\x8a-\x8c]|\xb0[\x81-\x83]|\xb1[\x81-\x84]|\xb2[\x82\x83\xbe]|\xb3[\x80'
b'\x81\x83\x84\x87\x88\x8a\x8b\xb3]|\xb5[\x80\x86-\x88\x8a-\x8c]|\xb7[\x90'
b'\x91\x98-\x9e\xb2\xb3]|[\xb8\xba]\xb3|\xbc[\xbe\xbf])|\xe1(?:\x80[\xb1'
b'\xbb\xbc]|\x81[\x96\x97]|\x82\x84|\x9c[\x95\xb4]|\x9e[\xb6\xbe\xbf]|\x9f'
b'[\x80-\x85\x87\x88]|\xa4[\xa3-\xa6\xa9-\xab\xb0\xb1\xb3-\xb8]|\xa8[\x99'
b'\x9a]|\xa9[\x95\x97\xad-\xb2]|\xac[\x84\xbb\xbd-\xbf]|\xad[\x80\x81\x83'
b'\x84]|\xae[\x82\xa1\xa6\xa7\xaa]|\xaf[\xa7\xaa-\xac\xae\xb2\xb3]|\xb0['
b'\xa4-\xab\xb4\xb5]|\xb3[\xa1\xb7])|\xea(?:\xa0[\xa3\xa4\xa7]|\xa2[\x80'
b'\x81\xb4-\xbf]|\xa3[\x80-\x83]|\xa5[\x92\x93]|\xa6[\x83\xb4\xb5\xba\xbb'
b'\xbe\xbf]|\xa7\x80|\xa8[\xaf\xb0\xb3\xb4]|\xa9\x8d|\xab[\xab\xae\xaf\xb5'
b']|\xaf[\xa3\xa4\xa6\xa7\xa9\xaa\xac])|\xf0(?:\x91(?:[\x80\xa5][\x80\x82]'
b'|\x82[\x82\xb0-\xb2\xb7\xb8]|\x84\xac|\x85[\x85\x86]|\x86[\x82\xb3-\xb5'
b'\xbf]|\x87[\x80\x8e]|\x88[\xac-\xae\xb2\xb3\xb5]|\x8b[\xa0-\xa2]|\x8c['
b'\x82\x83\xbf]|\x8d[\x81-\x84\x87\x88\x8b-\x8d\xa2\xa3]|\x90[\xb5-\xb7]|'
b'\x91[\x80\x81\x85]|\x92[\xb1\xb2\xb9\xbb\xbc\xbe]|[\x93\xbd]\x81|\x96['
b'\xb0\xb1\xb8-\xbb\xbe]|\x98[\xb0-\xb2\xbb\xbc\xbe]|\x9a[\xac\xae\xaf\xb6'
b']|\x9c\xa6|\xa0[\xac-\xae\xb8]|\xa4[\xb1-\xb5\xb7\xb8\xbd]|\xa7[\x91-'
b'\x93\x9c-\x9f\xa4]|\xa8\xb9|\xa9[\x97\x98]|\xaa\x97|\xb0[\xaf\xbe]|\xb2['
b'\xa9\xb1\xb4]|\xb6[\x8a-\x8e\x93\x94\x96]|\xbb[\xb5\xb6]|\xbc[\x83\xb4'
b'\xb5\xbe\xbf])|\x96(?:\xbd[\x91-\xbf]|\xbe[\x80-\x87]|\xbf[\xb0\xb1])|'
b'\x9d\x85[\xa6\xad])))*'
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment