changeset 0:d40dd97c0a50

Initial revision
author gongo
date Mon, 14 Jul 2008 00:27:51 +0900
parents
children aa84f8fe1f1f 44fb87ea539a
files Makefile bibsample.bib cell.tex cerium.tex compare.tex conclusion.tex dev.tex dummy.tex ebibsample.bib ess2008.bib ess2008.tex figure/amdahl.bb figure/amdahl.eps figure/amdahl.pdf figure/cbe-spe.bb figure/cbe-spe.graffle figure/cbe-spe.pdf figure/cbe.bb figure/cbe.graffle figure/cbe.pdf figure/cerium.bb figure/cerium.graffle figure/cerium.pdf figure/manager-pipeline.bb figure/manager-pipeline.graffle figure/manager-pipeline.pdf figure/scene_graph.bb figure/scene_graph.graffle figure/scene_graph.pdf figure/span.bb figure/span.graffle figure/span.pdf figure/spurs-pipeline.bb figure/spurs-pipeline.graffle figure/spurs-pipeline.pdf figure/spurs_task.bb figure/spurs_task.graffle figure/spurs_task.pdf figure/sync.bb figure/sync.graffle figure/sync.pdf introduction.tex ipsjcommon.sty ipsjpapers.cls ipsjpapers.sty ipsjsort.bst ipsjunsrt.bst manycore.tex task_manager.tex
diffstat 49 files changed, 7169 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,79 @@
+TARGET = ess2008
+
+LATEX   = platex-utf8
+BIBTEX  = jbibtex
+DVIPS   = dvips
+DVIPDFM = dvipdfmx
+RM      = rm -f
+
+#  Option definitions
+DVIPDFMOPT = 
+DVIPSOPT   = -D 720 -mode esphi -O 0mm,0mm -N0 
+
+#  Suffixes definitions
+.SUFFIXES: .tex .dvi
+
+#  Recipes
+all: pdf# $(TARGET).ps
+	open $(TARGET).pdf
+dvi:
+	@echo "----------- make dvi file ($(TARGET).dvi) ----------"
+	$(LATEX) $(TARGET)
+	$(BIBTEX) $(TARGET)
+	$(LATEX) $(TARGET)
+	$(LATEX) $(TARGET)
+pdf: dvi
+	$(DVIPDFM) $(DVIPDFMOPT) $(TARGET)
+ps: dvi
+	$(DVIPS) $(DVIPSOPT) $(TARGET)
+
+clean:
+	$(RM) *~ \#*
+	@if [ -f $(TARGET).aux ];\
+		then $(RM) $(TARGET).aux;\
+	fi
+	@if [ -f $(TARGET).log ];\
+		then $(RM) $(TARGET).log;\
+	fi
+	@if [ -f $(TARGET).toc ];\
+		then $(RM) $(TARGET).toc;\
+	fi
+	@if [ -f $(TARGET).lof ];\
+		then $(RM) $(TARGET).lof;\
+	fi
+	@if [ -f $(TARGET).lot ];\
+		then $(RM) $(TARGET).lot;\
+	fi
+	@if [ -f $(TARGET).big ];\
+		then $(RM) $(TARGET).big;\
+	fi
+	@if [ -f $(TARGET).bbl ];\
+		then $(RM) $(TARGET).bbl;\
+	fi
+	@if [ -f $(TARGET).ilg ];\
+		then $(RM) $(TARGET).ilg;\
+	fi
+	@if [ -f $(TARGET).idx ];\
+		then $(RM) $(TARGET).idx;\
+	fi
+	@if [ -f $(TARGET).ind ];\
+		then $(RM) $(TARGET).ind;\
+	fi
+	@if [ -f $(TARGET).dvi ];\
+		then $(RM) $(TARGET).dvi;\
+	fi
+	@if [ -f $(TARGET).ps ];\
+		then $(RM) $(TARGET).ps;\
+	fi
+	@if [ -f $(TARGET).pdf ];\
+		then $(RM) $(TARGET).pdf;\
+	fi
+	@if [ -f $(TARGET).out ];\
+		then $(RM) $(TARGET).out;\
+	fi
+	@if [ -f $(TARGET).bbl ];\
+		then $(RM) $(TARGET).bbl;\
+	fi
+	@if [ -f $(TARGET).blg ];\
+		then $(RM) $(TARGET).blg;\
+	fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bibsample.bib	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,198 @@
+@book{total,
+	author =	"$B0KF#(B $BOB?M(B",
+	yomi =		"Kazuto Itoh",
+	title =		"{\LaTeX} $B%H!<%?%k%,%$%I(B",
+	publisher =	"$B=(OB%7%9%F%`%H%l!<%G%#%s%0(B",
+	year =		1991}
+@book{latex,
+	author =	"Leslie Lamport",
+	title =		"A Document Preparation System {\LaTeX} User's Guide
+			 \& Reference Manual",
+	publisher = 	"Addison Wesley",
+	address = 	"Reading, Massachusetts",
+	year =		1986,
+	note =		"(Cooke, E., et al.$BLu!'J8=q=hM}%7%9%F%`(B {\LaTeX}$B!$(B" #
+			"$B%"%9%-!<=PHG6I(B (1990))"}
+@book{nodera,
+	author =	"$BLn;{(B $BN4;V(B",
+	yomi =		"Takashi Nodera",
+	title = 	"$B3Z!9(B {\LaTeX}", 
+	publisher =	"$B6&N)=PHG(B",
+	year =		1990}
+@book{okumura,
+	author =	"$B1|B<(B $B@2I'(B",
+	yomi =		"Haruhiko Okudera",
+	title =		"{\LaTeX} $BH~J8=q:n@.F~Lg(B",
+	publisher =	"$B5;=QI>O@<R(B",
+	year =		1991}
+@article{article1,
+	author =	"$B:y0f(B $B5.J8(B",
+	yomi =		"Sakurai, Takafumi",
+	title =		"$BD>4Q<g5AO@M}$H7?M}O@(B",
+	journal =	"$B>pJs=hM}(B",
+	volume =	30,
+	number =	6,
+	pages =		"626--634",
+	year =		1989}
+@article{article2,
+	author =	"$BLn8}(B $B7r0lO:(B and $BBgC+(B $B??(B",
+	yomi =		"Noguchi, K and Ohtani, M",
+	title =		"OSI$B$N<B8=$H$=$N2]Bj(B",
+	journal =	"$B>pJs=hM}(B",
+	volume =	31,
+	number =	9,
+	pages =		"1235-1244",
+	year =		1990}
+@article{article3,
+	author =	"Ssss Itoh and Nnnn Goto",
+	title =		"An Adaptive Noiseless Coding for Sources with Big
+			 Alphabet Size",
+	journal =	"Trans. IEICE",
+	volume =	"E74",
+	number =	9,
+	pages =		"2495--2503",
+	year =		1991,
+	month =		sep}
+@article{article4,
+	author =	"$BEDCf(B {$B@5<!(B} and $BB<>>(B $BLP(B and $B;32<(B $BLP(B",
+	yomi =		"Tanaka, S and Muramatsu, S and Yamashita, S",
+	title =		"9$BCJ?t(B7$B<!M[E*(BRunge-Kutta$BK!$N:GE,2=$K$D$$$F(B",
+	journal =	"$B>pJs=hM}3X2qO@J8;o(B",
+	volume =	33,
+	number =	12,
+	pages =		"1512--1526",
+	year =		1992}
+@article{article5,
+	author =	"K. Abrahamson and N. Dadoun and " #
+			"D. G. Kirkpatrick and T. Przytycka",
+	title =		"A Simple Parallel Tree Contraction Algorithm",
+	journal =	"J. Algorithms",
+	volume =	10,
+	number =	2,
+	pages =		"287--302",
+	year =		1989}
+@article{article6,
+	author =	"$BEDCf(B {$B@5<!(B} and others",
+	title =		"9$BCJ?t(B7$B<!M[E*(BRunge-Kutta$BK!$N<!?t>r7o<0$N2r$K$D$$$F(B",
+	journal =	"$B>pJs=hM}3X2qO@J8;o(B",
+	volume =	33,
+	number =	12,
+	pages =		"1506--1511",
+	year =		1992}
+
+@book{book1,
+	author =	"J. D. Foley and others",
+	title =		"Computer Graphics --- Principles and Practice",
+	series =	"System Programming Series",
+	publisher =	"Addison-Wesley",
+	address =	"Reading, Massachusetts",
+	edition =	"2nd",
+	year =		1990}
+@book{book2,
+	author =	"$B@iMU(B $BB'LP(B and $BB<2,(B $B0l?.(B",
+	yomi =		"Chiba, N. and Muraoka, K.",
+	title =		"$B%l%$%H%l!<%7%s%0(BCG$BF~Lg(B",
+	series =	"Information {\&} Computing",
+	volume =	46,
+	publisher =	"$B%5%$%(%s%9<R(B",
+	year =		1990}
+@book{book3,
+	author =	"Chang, C. L. and Lee, R. C. T.",
+	title =		"Symbolic Logic and Mechanical Theorem Proving",
+	publisher =	"Academic Press",
+	address =	"New York",
+	year =		1973,
+	note =		"($BD9Hx??!$DT0f=a0lLu(B: " #
+			"$B7W;;5!$K$h$kDjM}$N<+F0>ZL@(B, " #
+			"$BF|K\%3%s%T%e!<%?6(2q(B (1983))"}
+@booklet{booklet1,
+	author =	"$B?7@$Be%3%s%T%e!<%?5;=Q3+H/5!9=(B",
+	title =		"$BBh8^@$Be%3%s%T%e!<%?%W%m%8%'%/%H$N35MW(B",
+	howpublished =	"{FGCS'92}$B$K$FG[I[(B",
+	year =		1992}
+
+@inbook{inbook1,
+	author =	"Knuth, D. E.",
+	title =		"Fundamental Algorithms",
+	series =	"Art of Computer Programming",
+	volume =	1,
+	chapter =	2,
+	pages =		"371--381",
+	publisher =	"Addison-Wesley",
+	address =	"Reading, Massachusetts",
+	edition =	"2nd",
+	year =		1973}
+
+@incollection{incollection1,
+	author =	"Schwartz, Aaaa Jjjj",
+	title =		"Subdividing B{\'e}zier Curves and Surfaces",
+	booktitle =	"Geometric Modeling: Algorithms and New Trends",
+	editor =	"Farin, G. E.",
+	publisher =	"SIAM",
+	address =	"Philadelphia",
+	pages =		"55--66",
+	year =		1987}
+
+@inproceedings{inproceedings1,
+	author =	"Baraff, D",
+	title =		"Curved Surfaces and Coherence for Non-penetrating
+			 Rigid Body Simulation",
+	booktitle =	"SIGGRAPH '90 Proceedings",
+	pages =		"19--28",
+	editor =	"Beach, R. J.",
+	address =	"Dallas, Texas",
+	organization =	"ACM",
+	publisher =	"Addison-Wesley",
+	year =		1990}
+
+@manual{manual1,
+	organization =	"Adobe Systems Inc.",
+	title =		"PostScript Language Reference Manual",
+	publisher =	"Addison-Wesley",
+	address =	"Reading, Massachusetts",
+	year =		1985}
+
+@mastersthesis{mastersthesis1,
+	author =	"$B;32<(B $B5A9T(B",
+	yomi =		"Yamashita, Y",
+	title =		"$BJ8L.<+M3J8K!$X$NH]Dj$NF3F~(B",
+	school =	"$BC^GHBg3XBg3X1!9)3X8&5f2J(B",
+	year =		1989}
+
+
+@misc{misc1,
+	author =	"$B@FF#(B $B9/8J(B and $BCfEg(B $B9@(B",
+	title =		"{{\tt ipsjpapers.sty}}",
+	note =		"($B>pJs=hM}3X2qO@J8;oMQ%9%?%$%k%U%!%$%k!$(B" #
+			"$BO@J8Cx<T$KG[I[(B)",
+	year =		1995}
+
+@phdthesis{phdthesis1,
+	author =	"Weihl, W.",
+	title =		"Specification and Implementation of
+			 Atomic Data Types",
+	school =	"MIT",
+	address =	"Boston",
+	year =		1984}
+
+@proceedings{proceedings1,
+	title =		"Proc. Intl. Conf. on Fifth Generation Computer
+			 Systems",
+	organization =	"Institute for New Generation Computer Technology",
+	volume =	1,
+	year =		1992}
+
+@techreport{techreport1,
+	author =	"Ihsakat Aredon",
+	title =		"{\TeX} $BFH7N8E(B",
+	type =		"Seminar on Mathematical Sciences",
+	number =	13,
+	institution =	"Department of Mathematics, Keio University",
+	address =	"Yokohama",
+	year =		1989}
+
+@unpublished{unpublished,
+	author =	"$B>pJs=hM}3X2qO@J8;oJT=80Q0w2q(B",
+	title =		"{\LaTeX}$B$K$h$kO@J8:n@.$N%,%$%I(B($BBh(B1$BHG(B)",
+	note =		"($BO@J8Cx<T$KG[I[(B)",
+	year =		1995}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cell.tex	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,63 @@
+\section{Cell}
+Cell Broadband Engine \cite{cell} は、SCEI と IBM によって開発された
+CPU である。2 thread の PPE (PowerPC Processor Element) と、
+8 個の SPE (Synergetic Processor Element) を持ち、
+EIB と呼ばれる高速リングバスで構成されている。
+本研究で用いた PS3Linux (Fedora 8) では、
+6 個の SPE を使うことができる (\figref{fig-cbe}) 。
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.41]{figure/cbe.pdf}
+    \caption{Cell Architecture}
+    \label{fig-cbe}
+  \end{center}
+\end{figure}
+
+SPE には 256KB の Local Store (LS) と呼ばれる、SPE から唯一直接参照できる
+メモリ領域があり、バスに負担をかけることなく並列に計算を進めることが出来る。
+SPE からメインメモリへは、直接アクセスすることは出来ず、
+SPE を構成する一つである MFC (Memory Flow Controller) へ、チャネルを介して
+DMA (Direct Memory Access) 命令を送ることで行われる (\figref{fig-cbe-spe}) 。
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.6]{figure/cbe-spe.pdf}
+    \caption{Synergetic Processor Element}
+    \label{fig-cbe-spe}
+  \end{center}
+\end{figure}
+
+
+SPE はグラフィックスに適した、4 つの固定小数点、浮動小数点を
+同時に演算する命令などを持ち、PPE に比べて高速な演算が可能である。
+そのため、ほとんどの演算を SPE 上で行わせることが推奨されている。
+
+
+\subsection{SPURS}
+ここでは、現在発表されている Cell の開発環境である SPURS \cite{spurs} について説明する。
+
+SPURS は、閉じた並列分散と考えることができる Cell の環境で、
+いかに効率よく動作させるかということを考えたシステムである (\figref{fig-spurs-pipeline}) (\figref{fig-spurs-task}) 。
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.36]{figure/spurs-pipeline.pdf}
+    \caption{SPURS Pipeline}
+    \label{fig-spurs-pipeline}
+  \end{center}
+\end{figure}
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.36]{figure/spurs_task.pdf}
+    \caption{SPURS Task}
+    \label{fig-spurs-task}
+  \end{center}
+\end{figure}
+
+Cell の性能を存分に生かすためには SPE を効率よく使い切ることである。
+SPE の動作を止めることなく、同期を最小限に行う必要がある。 
+そこで SPURS では SPE を効率よく利用するために、PPE に依存せずに SPE コードを 
+選択し、実行することと機能は効率重視で割り切ることを挙げている。
+現在 SPURS は一般には公開されていない。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cerium.tex	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,105 @@
+\section{Cerium}
+Cerium は Scene Graph, Rendering Engine, Task Manager から構成され、
+
+\begin{enumerate}
+  \item Scene Graph が持つ Polygon の座標から、実際に表示する座標の計算を行い、
+    PolygonPack を生成する
+  \item PolygonPack から、同じ Y 座標を持つ線分の集合 SpanPack を生成する
+  \item SpanPack を (Texture を読み込みながら) Z Buffer を用いて描画する
+\end{enumerate}
+
+という 3 つのタスクを持つ (\figref{fig:cerium})。
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.35]{figure/cerium.pdf}
+    \caption{Cerium の 要素}
+    \label{fig:cerium}
+  \end{center}
+\end{figure}
+
+
+Ceritum は、Scene Graph、PolygonPack、SpanPack に対してデータ並列実行を
+行う。さらに、この 3 つのタスクは表示画面毎にパイプライン的に実行される。
+そのため、Ceritum では並列度を維持することができる。
+
+\subsection{Scene Graph}
+本研究では、ゲーム中の一つの場面 (Scene) を構成するオブジェクトやその振る舞い、
+ゲームのルールの集合を Scene Graph とする \cite{chiaki} 。
+Scene Graph のノードは
+親子関係を持つ木構造で構成される (\figref{fig:scene_graph}) 。
+そのため、Scene Graph の各ノードに対してデータ並列実行することが
+可能と言える。
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.35]{figure/scene_graph.pdf}
+    \caption{Scene Graph Structure}
+    \label{fig:scene_graph}
+  \end{center}
+\end{figure}
+
+Scene Graph によりプログラムが個々のゲーム場面に分割され、
+ゲーム場面の遷移を StatePattern を用いて記述すると、
+if,case 文が排除できるので、プログラムの可読性と独立性が向上する。
+これにより、過去の PS、PS2 によるゲームプログラムの移植や改良にかかる
+作業時間短縮が見込める。
+
+Scene Graph Node は以下のようなデータと動作を持つ。
+
+\begin{itemize}
+  \item データ
+    \begin{itemize}
+      \item Vervatim : ポリゴンオブジェクトの頂点座標
+      \item Texture : ポリゴンオブジェクトのテクスチャ座標
+      \item TextureImage : テクスチャイメージ
+      \item TransMatrix : ポリゴンオブジェクトの変換行列
+      \item Coordinates : オブジェクトの座標
+      \item Angle : オブジェクトの角度
+    \end{itemize}
+  \item 動作
+    \begin{itemize}
+    \item Move : 自律的なオブジェクトの動き
+    \item Collision : 他ノードと衝突したときの動き
+    \end{itemize}
+\end{itemize}
+
+今回は Scene Graph の作成に、オープンソースの 3D モデリングツールである
+Blender \cite{blender}  を用いる。Blender でオブジェクトを作成し、
+ポリゴン情報やテクスチャ情報が記述された xml ファイルを出力する。
+その xml ファイルを Rendering Engine が受け取って Polygon を生成する。
+
+
+\subsection{Rendering Engine} \label{sec:rendering-engine}
+Rendering Engine は Polygon から Span を生成する部分と Span に RGB を
+マッピングし描画する部分と二つに分けることが出来る。
+Span とは、Polygon に対するある特定の Y 座標に関するデータを抜き出した
+ものである (\figref{fig:span}) 。
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.48]{figure/span.pdf}
+    \caption{Span}
+    \label{fig:span}
+  \end{center}
+\end{figure}
+
+生成された Span を SPE が DMA で受け取り、Z Buffer を用いて
+Frame Buffer に書き込むピクセルの座標に対応する RGB 値を、
+テクスチャデータから取り出して書き込む。
+テクスチャデータは、プログラム起動時に一度だけ DMA で全て取得する。
+
+Frame Buffer は mmap されているので、ピクセルデータを DMA 転送することで
+描画している。
+
+\subsection{Cerium TaskManager}
+\figref{fig:cerium} のタスクを TaskManager に適用すると
+\figref{fig:manager-pipeline} のようにパイプライン的に動作する。
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.36]{figure/manager-pipeline.pdf}
+    \caption{Task Manager が行う Cerium Pipeline}
+    \label{fig:manager-pipeline}
+  \end{center}
+\end{figure}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compare.tex	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,48 @@
+\section{Cerium の評価と考察}
+
+Cerium Rendering Engine を用いて、
+テクスチャを貼った一つの立方体を回転させるというプログラムを実行した。
+
+今回、\figref{fig:cerium} で示した Task に対する CPU の割り振りは
+\tabref{tab:hyoka1} とする。
+
+\begin{table}[htbp]
+  \caption{Task の実行 CPU} \label{tab:hyoka1}
+  \hbox to\hsize{\hfil
+  \begin{tabular}{c|l} \hline \hline
+    Task & CPU \\ \hline
+    SceneGraph to PolygonPack & PPE \\
+    Polygonpack to SpanPack   & PPE \\
+    Rendering & SPE \\ \hline
+  \end{tabular}\hfil}
+\end{table}
+
+
+描画領域の大きさは 720x480 とし、
+使用する SPE の数を変えて実行速度の比較を行った。
+
+\begin{table}[htbp]
+  \caption{実行速度 (720x480)} \label{tab:hyoka3}
+  \hbox to\hsize{\hfil
+    \begin{tabular}{l|r} \hline \hline
+      実行環境 & 実行速度\\ \hline
+      PPE のみ & 74 FPS \\ 
+      PPE + SPE 1台 & 190 FPS \\ 
+      PPE + SPE 2台 & 245 FPS \\ 
+      PPE + SPE 3台 & 270 FPS \\ 
+      PPE + SPE 6台 & 293 FPS \\ \hline
+    \end{tabular}\hfil}
+\end{table}
+
+\tabref{tab:hyoka3} より、SPE の台数を増やす事によって、
+実行速度が向上しているのがわかる。
+しかし、正しく台数効果が出ているとは言えない。
+その原因として、TaskManager の実装の不備があげられる。
+
+現在、Cerium TaskManager には DMA でメインメモリから SPE 上にプログラムを
+ロードする機能を実装していないため、
+必要な時に必要なプログラムだけを SPE 上に置く事が出来ない。
+SPE の容量では、Cerium の全てのタスクを SPE 上に乗せる事は出来ないため、
+現在は Rendering のタスクだけを SPE 上にマッピングしてある。
+全てのタスクを SPE 上で実行できるようになれば、
+実行速度はさらに向上すると考えられる。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/conclusion.tex	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,9 @@
+\section{まとめ}
+本研究では、Many Core Architecture 向けの Fine Grain Task Manager を実装した。
+Task Manager を用いれば、
+シーケンシャルプログラムから並列プログラムへの変換が容易にできる。
+
+また、例題として Cell 上で動作する、ゲームプログラム用フレームワークである
+Cerium を開発した。PS3 上という限られた環境だけでなく、
+Linux や Mac OS X でもテストやデバッグを行うことが出来るため、
+並列プログラミング経験の低い学生の実験にも使用できる。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dev.tex	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,35 @@
+\section{TaskManager を用いた並列プログラムの開発行程} \label{sec:debug}
+TaskManager を用いたプログラムの作成では、
+以下の段階において、それぞれ実装とテストを行う。
+
+\begin{enumerate}
+\item C によるシーケンシャルな実装 \label{list_dev1}
+\item TaskManager を考慮したデータ構造を持つ実装 \label{list_dev2}
+\item コードをタスクに分割し、シーケンシャルに実行する実装 \label{list_dev3}
+\item タスクを並列実行する実装 \label{list_dev4}
+\end{enumerate}
+
+
+段階 (\ref{list_dev1}) の実装は Task Manager を用いず、
+プログラムのアルゴリズムの信頼性を確認するために用いる。
+
+段階 (\ref{list_dev2}) ではコードをタスクに分割した際、
+そのタスクが使用できるようなデータの変換が必要になり、
+段階 (\ref{list_dev1}) と同じ結果を得られるかどうかを検証する。
+
+段階 (\ref{list_dev3}) の実装からは Task Manager を用いる。
+この段階まではアーキテクチャに依存しないので、
+ターゲットが開発途中の段階でも記述することが可能である。
+また、入力に対して出力が一意に決まる状況であり、テストは容易である。
+シーケンシャルな実装であるため、デバッグも二分法により容易に行うことが出来る。
+
+段階 (\ref{list_dev4}) では、段階 (\ref{list_dev3}) までが動いていれば
+問題なく動作すると期待される。
+問題が発生した場合、その原因と思われるタスクを見つけ、
+一度段階 (\ref{list_dev3}) に戻した後、前後のタスクと合わせて
+入出力データのチェックなどのテストしていくことが必要となる。
+
+段階 (\ref{list_dev3}) から 段階 (\ref{list_dev4}) へのプログラムの変換は
+非常に容易である。Task Manager の API である set\_cpu() を用いることにより、
+Task をメインスレッドで実行するか、他 Core で実行するかを
+明示的に書くことが出来るからである。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dummy.tex	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,60 @@
+%%% jdummy.def
+%
+\DeclareRelationFont{JY1}{mc}{it}{}{OT1}{cmr}{it}{}
+\DeclareRelationFont{JT1}{mc}{it}{}{OT1}{cmr}{it}{}
+\DeclareFontShape{JY1}{mc}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*min
+    <10.95><12><14.4><17.28><20.74><24.88> min10
+    <-> min10}{}
+\DeclareFontShape{JT1}{mc}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*tmin
+    <10.95><12><14.4><17.28><20.74><24.88> tmin10
+    <-> tmin10}{}
+\DeclareRelationFont{JY1}{mc}{sl}{}{OT1}{cmr}{sl}{}
+\DeclareRelationFont{JT1}{mc}{sl}{}{OT1}{cmr}{sl}{}
+\DeclareFontShape{JY1}{mc}{m}{sl}{<5> <6> <7> <8> <9> <10> sgen*min
+    <10.95><12><14.4><17.28><20.74><24.88> min10
+    <-> min10}{}
+\DeclareFontShape{JT1}{mc}{m}{sl}{<5> <6> <7> <8> <9> <10> sgen*tmin
+    <10.95><12><14.4><17.28><20.74><24.88> tmin10
+    <-> tmin10}{}
+\DeclareRelationFont{JY1}{mc}{sc}{}{OT1}{cmr}{sc}{}
+\DeclareRelationFont{JT1}{mc}{sc}{}{OT1}{cmr}{sc}{}
+\DeclareFontShape{JY1}{mc}{m}{sc}{<5> <6> <7> <8> <9> <10> sgen*min
+    <10.95><12><14.4><17.28><20.74><24.88> min10
+    <-> min10}{}
+\DeclareFontShape{JT1}{mc}{m}{sc}{<5> <6> <7> <8> <9> <10> sgen*tmin
+    <10.95><12><14.4><17.28><20.74><24.88> tmin10
+    <-> tmin10}{}
+\DeclareRelationFont{JY1}{gt}{it}{}{OT1}{cmbx}{it}{}
+\DeclareRelationFont{JT1}{gt}{it}{}{OT1}{cmbx}{it}{}
+\DeclareFontShape{JY1}{mc}{bx}{it}{<5> <6> <7> <8> <9> <10> sgen*goth
+    <10.95><12><14.4><17.28><20.74><24.88> goth10
+    <-> goth10}{}
+\DeclareFontShape{JT1}{mc}{bx}{it}{<5> <6> <7> <8> <9> <10> sgen*tgoth
+    <10.95><12><14.4><17.28><20.74><24.88> tgoth10
+    <-> tgoth10}{}
+\DeclareRelationFont{JY1}{gt}{sl}{}{OT1}{cmbx}{sl}{}
+\DeclareRelationFont{JT1}{gt}{sl}{}{OT1}{cmbx}{sl}{}
+\DeclareFontShape{JY1}{mc}{bx}{sl}{<5> <6> <7> <8> <9> <10> sgen*goth
+    <10.95><12><14.4><17.28><20.74><24.88> goth10
+    <-> goth10}{}
+\DeclareFontShape{JT1}{mc}{bx}{sl}{<5> <6> <7> <8> <9> <10> sgen*tgoth
+    <10.95><12><14.4><17.28><20.74><24.88> tgoth10
+    <-> tgoth10}{}
+\DeclareRelationFont{JY1}{gt}{sc}{}{OT1}{cmbx}{sc}{}
+\DeclareRelationFont{JT1}{gt}{sc}{}{OT1}{cmbx}{sc}{}
+\DeclareFontShape{JY1}{mc}{bx}{sc}{<5> <6> <7> <8> <9> <10> sgen*goth
+    <10.95><12><14.4><17.28><20.74><24.88> goth10
+    <-> goth10}{}
+\DeclareFontShape{JT1}{mc}{bx}{sc}{<5> <6> <7> <8> <9> <10> sgen*tgoth
+    <10.95><12><14.4><17.28><20.74><24.88> tgoth10
+    <-> tgoth10}{}
+\DeclareRelationFont{JY1}{gt}{it}{}{OT1}{cmr}{it}{}
+\DeclareRelationFont{JT1}{gt}{it}{}{OT1}{cmr}{it}{}
+\DeclareFontShape{JY1}{gt}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*goth
+    <10.95><12><14.4><17.28><20.74><24.88> goth10
+    <-> goth10}{}
+\DeclareFontShape{JT1}{gt}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*tgoth
+    <10.95><12><14.4><17.28><20.74><24.88> tgoth10
+    <-> tgoth10}{}
+\endinput
+%%%% end of jdummy.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ebibsample.bib	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,139 @@
+@book{companion,
+	author =	"Michael Goossens and Frank Mittelbach and
+			 Alexander Samarin",
+	title =		"The LaTeX Companion",
+	publisher =	"Addison Wesley",
+	address =	"Reading, Massachusetts",
+	year =		1993}
+@book{latex,
+	author =	"Leslie Lamport",
+	title =		"A Document Preparation System {\LaTeX} User's Guide
+			 \& Reference Manual",
+	publisher = 	"Addison Wesley",
+	address = 	"Reading, Massachusetts",
+	year =		1986}
+@article{article1,
+	author =	"Ssss Itoh and Nnnn Goto",
+	title =		"An Adaptive Noiseless Coding for Sources with Big
+			 Alphabet Size",
+	journal =	"Trans. IEICE",
+	volume =	"E74",
+	number =	9,
+	pages =		"2495--2503",
+	year =		1991,
+	month =		sep}
+@article{article2,
+	author =	"K. Abrahamson and N. Dadoun and " #
+			"D. G. Kirkpatrick and T. Przytycka",
+	title =		"A Simple Parallel Tree Contraction Algorithm",
+	journal =	"J. Algorithms",
+	volume =	10,
+	number =	2,
+	pages =		"287--302",
+	year =		1989}
+
+@book{book1,
+	author =	"J. D. Foley and others",
+	title =		"Computer Graphics --- Principles and Practice",
+	series =	"System Programming Series",
+	publisher =	"Addison-Wesley",
+	address =	"Reading, Massachusetts",
+	edition =	"2nd",
+	year =		1990}
+@book{book2,
+	author =	"Chang, C. L. and Lee, R. C. T.",
+	title =		"Symbolic Logic and Mechanical Theorem Proving",
+	publisher =	"Academic Press",
+	address =	"New York",
+	year =		1973}
+
+@booklet{booklet1,
+	author =	"{Institute for New Generation Computer Technology}",
+	title =		"Overview of the Fifth Generation Computer Project",
+	howpublished =	"distributed in {FGCS'92}",
+	year =		1992,
+	note =		"(in Japanese)"}
+
+@inbook{inbook1,
+	author =	"Knuth, D. E.",
+	title =		"Fundamental Algorithms",
+	series =	"Art of Computer Programming",
+	volume =	1,
+	chapter =	2,
+	pages =		"371--381",
+	publisher =	"Addison-Wesley",
+	address =	"Reading, Massachusetts",
+	edition =	"2nd",
+	year =		1973}
+
+@incollection{incollection1,
+	author =	"Schwartz, Aaaa Jjjj",
+	title =		"Subdividing B{\'e}zier Curves and Surfaces",
+	booktitle =	"Geometric Modeling: Algorithms and New Trends",
+	editor =	"Farin, G. E.",
+	publisher =	"SIAM",
+	address =	"Philadelphia",
+	pages =		"55--66",
+	year =		1987}
+
+@inproceedings{inproceedings1,
+	author =	"Baraff, D",
+	title =		"Curved Surfaces and Coherence for Non-penetrating
+			 Rigid Body Simulation",
+	booktitle =	"SIGGRAPH '90 Proceedings",
+	pages =		"19--28",
+	editor =	"Beach, R. J.",
+	address =	"Dallas, Texas",
+	organization =	"ACM",
+	publisher =	"Addison-Wesley",
+	year =		1990}
+
+@manual{manual1,
+	organization =	"Adobe Systems Inc.",
+	title =		"PostScript Language Reference Manual",
+	publisher =	"Addison-Wesley",
+	address =	"Reading, Massachusetts",
+	year =		1985}
+
+@mastersthesis{mastersthesis1,
+	author =	"Kazuhiro Ohno",
+	title =		"Efficient Message Communication of Concurrent Logic
+			 Programming Language KL1 Based on Static Analysis",
+	school =	"Dept. Information Science, Kyoto University",
+	year =		1995}
+
+@misc{misc1,
+	author =	"Yasuki Saito and Hiroshi Nakashima",
+	title =		"{{\tt ipsjpapers.sty}}",
+	note =		"(Style file for Trans. IPSJ distributed to authors.)",
+	year =		1995}
+
+@phdthesis{phdthesis1,
+	author =	"Weihl, W.",
+	title =		"Specification and Implementation of
+			 Atomic Data Types",
+	school =	"MIT",
+	address =	"Boston",
+	year =		1984}
+
+@proceedings{proceedings1,
+	title =		"Proc. Intl. Conf. on Fifth Generation Computer
+			 Systems",
+	organization =	"Institute for New Generation Computer Technology",
+	volume =	1,
+	year =		1992}
+
+@techreport{WarD:WAM-1,
+	author =	"David H. D. Warren",
+	title =		"An Abstract {Prolog} Instruction Set",
+	type =		"Technical Report",
+	number =	309,
+	institution =	"Artificial Intelligence Center, SRI International",
+	year =		1983,
+	month =		oct}
+
+@unpublished{unpublished,
+	author =	"{Editorial Board of Trans. IPSJ}",
+	title =		"How to Typeset Your Papers in {\LaTeX} (Version 1)",
+	note =		"(distributed to authors)",
+	year =		1995}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ess2008.bib	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,63 @@
+@article{akira,
+author = "{Akira KAMIZATO}",
+title = "{Cell を用いたゲームフレームワークの提案}",
+journal = "{琉球大学理工学研究科情報工学専攻 平成19年度学位論文}",
+year = 2008
+}
+
+@book{amdahl,
+author = "{Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, and Doug Lea}",
+title = "{Java Concurrency in Prac-tice}",
+publisher = "{Addison-Wesley Professional}",
+year = "2005"
+}
+
+@misc{gongo,
+author = "",
+title = "{SourceForge.JP: Project Info - Cerium Rendering Engine}",
+howpublished = "\url{https://sourceforge.jp/projects/cerium/}"
+}
+
+@misc{spurs,
+author = "{Keisuke Inoue}",
+title = "{SPU Centric Execution Model}",
+text = "SACSIS 2006",
+year = 2006
+}
+
+@misc{cell,
+author = "{Sony Corporation}",
+title = "{Cell broadband engine architecture}",
+year = 2005
+}
+
+@journal{chiaki,
+author = "{Chiaki SUGIYAMA}",
+title = "{SceneGraph と StatePattern を用いたゲームフレームワークの設計と実装}",
+journal = "{琉球大学工学部情報工学科 平成19年度卒業論文}",
+year = 2008
+}
+
+@misc{blender,
+title = "{Blender.jp - Blender Japanese Website}",
+howpublished = "\url{http://blender.jp/}"
+}
+
+@manual{libspe2,
+author = "{International Business Machines Corporation, Sony Computer Entertainment Incorporated, Toshiba Corporation}",
+title = "{SPE Runtime Management Library}",
+year = 2006
+}
+
+@article{kono,
+author = "{Shinji KONO}",
+title = "{検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation ba sed C と、その Cell への応用}",
+journal = "{電子情報通信学会VLSI設計技術研究会}",
+year = 2008
+}
+
+@manual{mailbox,
+author = "{Sony Corporation}",
+title = "{Cell BroadbandEngine アーキテクチャ}",
+year = 2006
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ess2008.tex	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,82 @@
+%\documentstyle{ipsjpapers}
+\documentclass{ipsjpapers}
+\usepackage[dvipdfm]{graphicx}
+\usepackage{url}
+
+\input{dummy.tex} %% font
+
+% ユーザが定義したマクロなど.
+\makeatletter
+\let\@ARRAY\@array \def\@array{\def\<{\inhibitglue}\@ARRAY}
+\def\<{\(\langle\)}
+\def\>{\(\rangle\)}
+\def\|{\verb|}
+\def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline}
+\def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\}
+\def\LATEX{\iLATEX\Large}
+\def\LATEx{\iLATEX\normalsize}
+\def\LATex{\iLATEX\small}
+\def\iLATEX#1{L\kern-.36em\raise.3ex\hbox{#1\bf A}\kern-.15em
+    T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
+\def\LATEXe{\ifx\LaTeXe\undefined \LaTeX 2e\else\LaTeXe\fi}
+\def\LATExe{\ifx\LaTeXe\undefined \iLATEX\scriptsize 2e\else\LaTeXe\fi}
+\def\Quote{\list{}{}\item[]}
+\let\endQuote\endlist
+\def\TT{\if@LaTeX@e\tt\fi}
+\def\CS#1{\if@LaTeX@e\tt\expandafter\string\csname#1\endcsname\else
+	$\backslash$#1\fi}
+
+%\checklines	% 行送りを確認する時に使用
+\begin{document}%{
+% 和文表題
+\title{Cell 用の Fine-Grain Task Manager の実装}
+% 英文表題
+\etitle{Implementation of Fine-grain Task Manager for Cell}
+% 所属ラベルの定義
+\affilabel{ie.u-ryukyu1}{琉球大学理工学研究科情報工学専攻\\Interdisciplinary Infomation Engineering, Graduate School of Engineering and Science, University of the Ryukyus}
+\affilabel{ie.u-ryukyu2}{琉球大学工学部情報工学科\\Infomation Engineering, University of the Ryukyus}
+% 和文著者名
+\author{宮國 渡\affiref{ie.u-ryukyu1}\and
+	河野 真治\affiref{ie.u-ryukyu2}}
+	
+% 英文著者名
+\eauthor{Wataru MIYAGUNI\affiref{ie.u-ryukyu1}\and
+	Shinji KONO\affiref{ie.u-ryukyu2}}
+
+% 和文概要
+\begin{abstract}
+近年、CPU の性能向上は、クロックサイクルをあげることよりも、
+複数の CPU コア (Many Core Architecture) を導入することにより
+得られるようになって来ている。しかし、Many Core Architecture のプログラムは
+複雑であり、その信頼性を確保することは難しい。
+本研究では Many Core Architecture 向けの Fine Grain Task Manager を設計する。
+例題として、Rendering を含む PS3 上のゲームプログラム用フレームワークである
+Cerium を用いる
+\end{abstract}
+% 英文概要
+\begin{eabstract}
+CPU performance is achieved in Many Core Architecture rather than high clock speed recently. The complicated nature of this architecture makes reliable program difficult.
+In this paper, we implemented Fine Grain Task Manager for Many Core
+Architecture.
+We use this method for "Cerium" that is the framework for the game program on PS3 including Rendering.
+
+\end{eabstract}
+
+% 表題などの出力
+\maketitle
+
+% 本文はここから始まる
+
+\input{introduction}  % 研究目的
+\input{cell}          % Cell
+\input{manycore}      % many core system
+\input{task_manager}  % Task Manager
+\input{dev}           % 開発過程
+\input{cerium}        % Cerium
+\input{compare}       % 評価と考察
+\input{conclusion}    % まとめ
+
+\bibliographystyle{ipsjunsrt}
+\bibliography{ess2008}
+
+\end{document}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/figure/amdahl.bb	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./amdahl.pdf
+%%Creator: ebb Version 0.5.2 (+ArtBox)
+%%BoundingBox: 0 0 360 252
+%%CreationDate: Sun Jul 13 15:54:37 2008
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/figure/amdahl.eps	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,723 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: amdahl.eps
+%%Creator: gnuplot 4.2 patchlevel 3 
+%%CreationDate: Sun Jul 13 15:53:35 2008
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 410 302
+%%EndComments
+%%BeginProlog
+/gnudict 256 dict def
+gnudict begin
+%
+% The following 6 true/false flags may be edited by hand if required
+% The unit line width may also be changed
+%
+/Color false def
+/Blacktext false def
+/Solid false def
+/Dashlength 1 def
+/Landscape false def
+/Level1 false def
+/Rounded false def
+/TransparentPatterns false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+%
+/vshift -46 def
+/dl1 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
+} def
+/dl2 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul add } if
+} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+Level1 {} {
+/SDict 10 dict def
+systemdict /pdfmark known not {
+  userdict /pdfmark systemdict /cleartomark get put
+} if
+SDict begin [
+  /Title (amdahl.eps)
+  /Subject (gnuplot plot)
+  /Creator (gnuplot 4.2 patchlevel 3 )
+  /Author (Wataru MIYAGUNI)
+%  /Producer (gnuplot)
+%  /Keywords ()
+  /CreationDate (Sun Jul 13 15:53:35 2008)
+  /DOCINFO pdfmark
+end
+} ifelse
+%
+% Gnuplot Prolog Version 4.2 (August 2006)
+%
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/Z {closepath} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow {currentpoint stroke M 0 vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+  /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
+/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def
+/BL {stroke userlinewidth 2 mul setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/AL {stroke userlinewidth 2 div setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/UL {dup gnulinewidth mul /userlinewidth exch def
+	dup 1 lt {pop 1} if 10 mul /udl exch def} def
+/PL {stroke userlinewidth setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+% Default Line colors
+/LCw {1 1 1} def
+/LCb {0 0 0} def
+/LCa {0 0 0} def
+/LC0 {1 0 0} def
+/LC1 {0 1 0} def
+/LC2 {0 0 1} def
+/LC3 {1 0 1} def
+/LC4 {0 1 1} def
+/LC5 {1 1 0} def
+/LC6 {0 0 0} def
+/LC7 {1 0.3 0} def
+/LC8 {0.5 0.5 0.5} def
+% Default Line Types
+/LTw {PL [] 1 setgray} def
+/LTb {BL [] LCb DL} def
+/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
+/LT0 {PL [] LC0 DL} def
+/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
+/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
+/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
+/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
+/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
+/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
+/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
+/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
+/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
+/Dia {stroke [] 0 setdash 2 copy vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke
+  Pnt} def
+/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V
+  currentpoint stroke M
+  hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke
+  Pnt} def
+/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M
+  hpt2 vpt2 neg V currentpoint stroke M
+  hpt2 neg 0 R hpt2 vpt2 V stroke} def
+/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke
+  Pnt} def
+/Star {2 copy Pls Crs} def
+/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath fill} def
+/TriUF {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath fill} def
+/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke
+  Pnt} def
+/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath fill} def
+/Pent {stroke [] 0 setdash 2 copy gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore Pnt} def
+/PentF {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath fill grestore} def
+/Circle {stroke [] 0 setdash 2 copy
+  hpt 0 360 arc stroke Pnt} def
+/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
+/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def
+/C1 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C2 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C3 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C4 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C5 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc
+	2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc} bind def
+/C6 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C7 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C8 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C9 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 450 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+	2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C11 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C12 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C13 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C14 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 360 arc closepath fill
+	vpt 0 360 arc} bind def
+/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+	neg 0 rlineto closepath} bind def
+/Square {dup Rec} bind def
+/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def
+/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def
+/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def
+/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def
+/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill
+	exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def
+/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+	Bsquare} bind def
+/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+	Bsquare} bind def
+/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def
+/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def
+/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def
+/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def
+/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def
+/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def
+/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def
+/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def
+/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def
+/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def
+/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def
+/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def
+/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def
+/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def
+/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def
+/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def
+/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def
+/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def
+/DiaE {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke} def
+/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke} def
+/TriUE {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke} def
+/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke} def
+/PentE {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore} def
+/CircE {stroke [] 0 setdash 
+  hpt 0 360 arc stroke} def
+/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def
+/DiaW {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V Opaque stroke} def
+/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V Opaque stroke} def
+/TriUW {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V Opaque stroke} def
+/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V Opaque stroke} def
+/PentW {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  Opaque stroke grestore} def
+/CircW {stroke [] 0 setdash 
+  hpt 0 360 arc Opaque stroke} def
+/BoxFill {gsave Rec 1 setgray fill grestore} def
+/Density {
+  /Fillden exch def
+  currentrgbcolor
+  /ColB exch def /ColG exch def /ColR exch def
+  /ColR ColR Fillden mul Fillden sub 1 add def
+  /ColG ColG Fillden mul Fillden sub 1 add def
+  /ColB ColB Fillden mul Fillden sub 1 add def
+  ColR ColG ColB setrgbcolor} def
+/BoxColFill {gsave Rec PolyFill} def
+/PolyFill {gsave Density fill grestore grestore} def
+/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
+%
+% PostScript Level 1 Pattern Fill routine for rectangles
+% Usage: x y w h s a XX PatternFill
+%	x,y = lower left corner of box to be filled
+%	w,h = width and height of box
+%	  a = angle in degrees between lines and x-axis
+%	 XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill {gsave /PFa [ 9 2 roll ] def
+  PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+  PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+  gsave 1 setgray fill grestore clip
+  currentlinewidth 0.5 mul setlinewidth
+  /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+  0 0 M PFa 5 get rotate PFs -2 div dup translate
+  0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 M 0 PFs V} for
+  0 PFa 6 get ne {
+	0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 2 1 roll M PFs 0 V} for
+ } if
+  stroke grestore} def
+%
+/languagelevel where
+ {pop languagelevel} {1} ifelse
+ 2 lt
+	{/InterpretLevel1 true def}
+	{/InterpretLevel1 Level1 def}
+ ifelse
+%
+% PostScript level 2 pattern fill definitions
+%
+/Level2PatternFill {
+/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}
+	bind def
+/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} 
+>> matrix makepattern
+/Pat1 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke
+	0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}
+>> matrix makepattern
+/Pat2 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L
+	8 8 L 8 0 L 0 0 L fill}
+>> matrix makepattern
+/Pat3 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L
+	0 12 M 12 0 L stroke}
+>> matrix makepattern
+/Pat4 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L
+	0 -4 M 12 8 L stroke}
+>> matrix makepattern
+/Pat5 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L
+	0 12 M 8 -4 L 4 12 M 10 0 L stroke}
+>> matrix makepattern
+/Pat6 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L
+	0 -4 M 8 12 L 4 -4 M 10 8 L stroke}
+>> matrix makepattern
+/Pat7 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L
+	12 0 M -4 8 L 12 4 M 0 10 L stroke}
+>> matrix makepattern
+/Pat8 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L
+	-4 0 M 12 8 L -4 4 M 8 10 L stroke}
+>> matrix makepattern
+/Pat9 exch def
+/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def
+/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def
+/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def
+/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def
+/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def
+/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def
+/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def
+} def
+%
+%
+%End of PostScript Level 2 code
+%
+/PatternBgnd {
+  TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+} def
+%
+% Substitute for Level 2 pattern fill codes with
+% grayscale if Level 2 support is not selected.
+%
+/Level1PatternFill {
+/Pattern1 {0.250 Density} bind def
+/Pattern2 {0.500 Density} bind def
+/Pattern3 {0.750 Density} bind def
+/Pattern4 {0.125 Density} bind def
+/Pattern5 {0.375 Density} bind def
+/Pattern6 {0.625 Density} bind def
+/Pattern7 {0.875 Density} bind def
+} def
+%
+% Now test for support of Level 2 code
+%
+Level1 {Level1PatternFill} {Level2PatternFill} ifelse
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Helvetica) findfont 140 scalefont setfont
+1.000 UL
+LTb
+546 420 M
+63 0 V
+6353 0 R
+-63 0 V
+462 420 M
+( 0) Rshow
+1.000 UL
+LTb
+546 1162 M
+63 0 V
+6353 0 R
+-63 0 V
+-6437 0 R
+( 1) Rshow
+1.000 UL
+LTb
+546 1904 M
+63 0 V
+6353 0 R
+-63 0 V
+-6437 0 R
+( 2) Rshow
+1.000 UL
+LTb
+546 2646 M
+63 0 V
+6353 0 R
+-63 0 V
+-6437 0 R
+( 3) Rshow
+1.000 UL
+LTb
+546 3388 M
+63 0 V
+6353 0 R
+-63 0 V
+-6437 0 R
+( 4) Rshow
+1.000 UL
+LTb
+546 4130 M
+63 0 V
+6353 0 R
+-63 0 V
+-6437 0 R
+( 5) Rshow
+1.000 UL
+LTb
+546 4872 M
+63 0 V
+6353 0 R
+-63 0 V
+-6437 0 R
+( 6) Rshow
+1.000 UL
+LTb
+546 420 M
+0 63 V
+0 4389 R
+0 -63 V
+546 280 M
+( 0) Cshow
+1.000 UL
+LTb
+1188 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+( 0.1) Cshow
+1.000 UL
+LTb
+1829 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+( 0.2) Cshow
+1.000 UL
+LTb
+2471 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+( 0.3) Cshow
+1.000 UL
+LTb
+3112 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+( 0.4) Cshow
+1.000 UL
+LTb
+3754 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+( 0.5) Cshow
+1.000 UL
+LTb
+4396 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+( 0.6) Cshow
+1.000 UL
+LTb
+5037 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+( 0.7) Cshow
+1.000 UL
+LTb
+5679 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+( 0.8) Cshow
+1.000 UL
+LTb
+6320 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+( 0.9) Cshow
+1.000 UL
+LTb
+6962 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+( 1) Cshow
+1.000 UL
+LTb
+1.000 UL
+LTb
+546 4872 N
+546 420 L
+6416 0 V
+0 4452 V
+-6416 0 V
+Z stroke
+LCb setrgbcolor
+140 2646 M
+currentpoint gsave translate 90 rotate 0 0 M
+(effect of paralleling) Cshow
+grestore
+LTb
+LCb setrgbcolor
+3754 70 M
+(parallelization ratio) Cshow
+LTb
+1.000 UP
+1.000 UL
+LTb
+1.000 UL
+LT0
+LTb
+6311 4739 M
+(6 CPU) Rshow
+LT0
+6395 4739 M
+399 0 V
+546 1162 M
+65 6 V
+65 7 V
+64 6 V
+65 7 V
+65 7 V
+65 6 V
+65 7 V
+64 8 V
+65 7 V
+65 7 V
+65 8 V
+65 7 V
+65 8 V
+64 8 V
+65 8 V
+65 8 V
+65 9 V
+65 9 V
+64 8 V
+65 9 V
+65 9 V
+65 10 V
+65 9 V
+64 10 V
+65 10 V
+65 10 V
+65 10 V
+65 11 V
+64 11 V
+65 11 V
+65 11 V
+65 12 V
+65 11 V
+64 13 V
+65 12 V
+65 13 V
+65 13 V
+65 13 V
+65 14 V
+64 14 V
+65 14 V
+65 15 V
+65 15 V
+65 15 V
+64 16 V
+65 17 V
+65 17 V
+65 17 V
+65 18 V
+64 18 V
+65 19 V
+65 20 V
+65 20 V
+65 20 V
+64 22 V
+65 22 V
+65 22 V
+65 24 V
+65 24 V
+64 25 V
+65 26 V
+65 27 V
+65 28 V
+65 29 V
+65 29 V
+64 32 V
+65 32 V
+65 33 V
+65 35 V
+65 36 V
+64 38 V
+65 40 V
+65 41 V
+65 43 V
+65 45 V
+64 47 V
+65 49 V
+65 52 V
+65 54 V
+65 57 V
+64 60 V
+65 63 V
+65 67 V
+65 71 V
+65 75 V
+64 79 V
+65 85 V
+65 90 V
+65 96 V
+65 103 V
+65 110 V
+64 118 V
+65 128 V
+65 137 V
+65 150 V
+65 162 V
+64 178 V
+65 194 V
+65 214 V
+stroke
+LTb
+546 4872 N
+546 420 L
+6416 0 V
+0 4452 V
+-6416 0 V
+Z stroke
+1.000 UP
+1.000 UL
+LTb
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Helvetica
Binary file figure/amdahl.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/figure/cbe-spe.bb	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./cbe-spe.pdf
+%%Creator: ebb Version 0.5.2 (+ArtBox)
+%%BoundingBox: 0 0 271 359
+%%CreationDate: Mon Mar 24 01:57:05 2008
+
Binary file figure/cbe-spe.graffle has changed
Binary file figure/cbe-spe.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/figure/cbe.bb	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./cbe.pdf
+%%Creator: ebb Version 0.5.2 (+ArtBox)
+%%BoundingBox: 0 0 485 264
+%%CreationDate: Sun Mar 23 17:15:49 2008
+
Binary file figure/cbe.graffle has changed
Binary file figure/cbe.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/figure/cerium.bb	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./cerium.pdf
+%%Creator: ebb Version 0.5.2 (+ArtBox)
+%%BoundingBox: 0 0 470 535
+%%CreationDate: Mon Mar 24 11:12:47 2008
+
Binary file figure/cerium.graffle has changed
Binary file figure/cerium.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/figure/manager-pipeline.bb	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./manager-pipeline.pdf
+%%Creator: ebb Version 0.5.2 (+ArtBox)
+%%BoundingBox: 0 0 557 405
+%%CreationDate: Mon Mar 24 22:06:15 2008
+
Binary file figure/manager-pipeline.graffle has changed
Binary file figure/manager-pipeline.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/figure/scene_graph.bb	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./scene_graph.pdf
+%%Creator: ebb Version 0.5.2 (+ArtBox)
+%%BoundingBox: 0 0 542 288
+%%CreationDate: Mon Mar 24 02:27:40 2008
+
Binary file figure/scene_graph.graffle has changed
Binary file figure/scene_graph.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/figure/span.bb	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./span.pdf
+%%Creator: ebb Version 0.5.2 (+ArtBox)
+%%BoundingBox: 0 0 413 247
+%%CreationDate: Mon Mar 24 10:02:16 2008
+
Binary file figure/span.graffle has changed
Binary file figure/span.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/figure/spurs-pipeline.bb	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./spurs-pipeline.pdf
+%%Creator: ebb Version 0.5.2 (+ArtBox)
+%%BoundingBox: 0 0 551 205
+%%CreationDate: Tue Mar 25 11:56:24 2008
+
Binary file figure/spurs-pipeline.graffle has changed
Binary file figure/spurs-pipeline.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/figure/spurs_task.bb	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./spurs_task.pdf
+%%Creator: ebb Version 0.5.2 (+ArtBox)
+%%BoundingBox: 0 0 507 229
+%%CreationDate: Tue Mar 25 12:01:26 2008
+
Binary file figure/spurs_task.graffle has changed
Binary file figure/spurs_task.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/figure/sync.bb	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./sync.pdf
+%%Creator: ebb Version 0.5.2 (+ArtBox)
+%%BoundingBox: 0 0 577 554
+%%CreationDate: Sat Mar 29 08:29:28 2008
+
Binary file figure/sync.graffle has changed
Binary file figure/sync.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/introduction.tex	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,21 @@
+\section{研究の目的}
+本研究では、Many Core Architecture 向けの Fine Grain Task Manager を設計する。
+Fine Grain Task の単位はサブルーチンまたは関数とし、
+全ての Core が絶えず動くようにすることで全体の並列化率を高める。
+
+Fine Grain Task 自身や、タスク全体のデバッグを容易にするために、
+同じタスクが Mac OS X や Linux、PS3 上など複数の環境で動くようにする。
+また、Thread を多用せず、細粒度タスク内での同期は行わない。
+これにより、並列プログラミングの経験の低いプログラマでも容易に使用できる。
+
+例題として、本研究室で作成した、Rendering を含む PS3 上のゲームプログラム用
+フレームワークである Cerium を用いる。Cerium は、次の 3 つから構成される。
+
+\begin{itemize}
+  \item Scene Graph
+  \item Rendering Engine
+  \item Fine Grain Task Manager
+\end{itemize}
+
+Cerium は学生実験で使用しており、並列プログラミング経験の浅い学生でも、
+移植や改良、拡張が容易に行えるツールを目的としている
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsjcommon.sty	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,858 @@
+% Copyright (C) 1995,1996,1997,1998,1999,2000,2001
+%			by Hiroshi Nakashima, Yasuki Saito and
+%                          The Editorial Board of the IPSJ Journal
+%
+% ipsjcommon.sty 15-May-01 by Hiroshi Nakashima (ver 2.08)
+% (revision history deleted)
+% ipsjcommon.sty 24-Apr-95 by Hiroshi Nakashima (ver 1.0)
+
+%%%%%% Sectioning Commands %%%%%%
+
+% \section:	2$B9T<h$j(B
+% others:	1$B9T<h$j(B
+%
+% Note that \paragraph and \subparagraph act as \subsubsubsection and
+% \subsubsubsubsection resp.
+%
+% The form of sectioning header is;
+%	<1 Kanji sp> \the<sect-command> [`.' if \section] <1 Kanji sp> <title>
+% Nothe that <1 Kanji sp> is that of \normalsize.
+
+\def\section{\@startsection
+	{section}{1}{\@mojihaba}{\sec@aboveskip}{\sec@belowskip}{\fs@sec\bf}}
+\let\ipsj@section\section					% 2.04(1)
+\def\subsection{\@startsection
+	{subsection}{2}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}
+\def\subsubsection{\@startsection
+	{subsubsection}{3}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}
+\def\paragraph{\@startsection
+	{paragraph}{4}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}
+\def\subparagraph{\@startsection
+	{subparagraph}{5}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}
+
+\newcounter{section}
+\newcounter{subsection}[section]
+\newcounter{subsubsection}[subsection]
+\newcounter{paragraph}[subsubsection]
+\newcounter{subparagraph}[paragraph]
+
+\def\thesection{\arabic{section}}
+\def\sec@section@postfix{.}
+\def\thesubsection{\thesection.\arabic{subsection}}
+\def\thesubsubsection{\thesubsection.\arabic{subsubsection}}
+\def\theparagraph{\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph{\theparagraph.\arabic{subparagraph}}
+
+\setcounter{secnumdepth}{5}
+
+\def\appendix{\let\sec@sec\section
+	\def\section{\@startsection
+		{section}{1}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}%
+	\def\thesection{\appendixprefix\arabic{section}}%
+	\def\sec@section@postfix{\appendixpostfix}%
+	\stepcounter{section}\setcounter{section}{0}%
+	\@ifnextchar[%]
+		     {\sec@oappendix}{\sec@xappendix}}
+\def\sec@xappendix{\@ifstar{\let\section\sec@sec}%
+	{\sec@sec*{\ifDS@english Appendix\else $BIUO?(B\fi}}}
+\def\sec@oappendix[#1]{\sec@sec*{\ifDS@english Appendix: \else
+	$BIUO?(B\hskip\jspaceskip\fi #1}}
+\def\appendixprefix{A.}
+\def\appendixpostfix{}
+
+\def\acknowledgment{\par
+	{\bf \ifDS@english Acknowledgments\else $B<U<-(B\fi}\hskip\@mojihaba
+	\ignorespaces}
+\let\endacknowledgment\par
+
+\newif\ifipsj@recommendation \ipsj@recommendationfalse		% 2.04(1) >>
+\def\recommendation#1{\global\ipsj@recommendationtrue
+	\ifDS@draft\else \ra@putrcvacc\fi
+	\ipsj@section*{#1}
+}
+\def\endrecommendation{\par\vskip\baselineskip\penalty\opt@magicpenalty}
+								% 2.04(1) <<
+
+% Modified \@startsection has a trick for 2$B9T<h$j(B of \section, which must
+% work even if \section appears the top of a page.  The BEFORESKIP must be
+% inserted with respect to the previous baseline.  So, we must go back to
+% the imaginary previous baseline at the top of a page.  That is, we do;
+%	\vskip\baselineskip \vspace*{-\baselineskip}
+% which resuls;
+% 	<a> do nothing at midpage
+%	<b> go to the first baseline by \topskip, then go back to 0th
+%	    baseline by \vspace*.
+% The trick "\vskip-\prevdepth \prevdepth\z@" will assure exact vertical
+% space even when the last line has much depth.
+%
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+\def\@startsection#1#2#3#4#5#6{\if@noskipsec \leavevmode \fi
+	\par \@tempskipa #4\relax
+	\@afterindenttrue
+	\ifdim\@tempskipa<\z@ \@tempskipa-\@tempskipa \@afterindentfalse\fi
+	\if@nobreak \everypar{}\else \addpenalty{\@secpenalty}\fi
+	\ifdim\@tempskipa>\z@
+% Here is the trick for \section.
+		\vskip-\prevdepth \prevdepth\z@ \vskip\baselineskip
+		\vspace*{-\baselineskip}\vskip\@tempskipa\fi
+	\@ifstar
+	{\@ssect{#3}{#4}{#5}{#6}}{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+
+% \@sect is modified to cope with `.' for \section and $BJ8;z<h$j(B
+%
+% \@sect{NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}[TITLE]{TITLE}
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+	\def\@svsec{}\else 
+	\refstepcounter{#1}
+								% 2.00(1)>>
+	\let\@@protect\protect \def\protect{\noexpand\protect\noexpand}
+	\edef\@svsec{\csname the#1\endcsname \csname sec@#1@postfix\endcsname
+		\hskip\@mojihaba} \let\protect\@@protect\fi	% 2.00(1)<<
+	\@tempskipa #5\relax
+	\ifdim \@tempskipa<\z@ 
+        	\def\@svsechd{#6\hskip #3\relax\@svsec #8}	% 2.00(1)
+	\else
+        	\begingroup #6\relax
+		\@hangfrom{\hskip #3\relax\@svsec}%
+			{\interlinepenalty\@M \sec@mojidori{#8}\par}%
+		\endgroup
+	\fi \@xsect{#5}}
+
+% \@ssect is modified to cope with $BJ8;z<h$j(B
+%
+% \@sect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}{TITLE}
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+	\ifdim \@tempskipa<\z@ \def\@svsechd{#4\hskip #1\relax #5}%
+	\else \begingroup #4%
+		\@hangfrom{\hskip #1}{\interlinepenalty\@M
+			\sec@mojidori{#5}\par}\endgroup
+	\fi \@xsect{#3}}
+
+%% Modify \@xsect to avoid (buggy) \clubpenalty=10000. (H.N.)
+\def\@xsect#1{\@tempskipa #1\relax
+	\ifdim \@tempskipa<\z@
+		\glboal\@nobreakfalse \global\@noskipsectrue
+		\everypar{\global\@noskipsecfalse \hskip-\parindent
+			\begingroup \@svsechd \endgroup \unskip
+			\hskip -#1\everypar{}}%
+	\else
+		\par \nobreak
+		\vskip \@tempskipa \global\@nobreaktrue
+		\everypar{\global\@nobreakfalse
+			\if@afterindent\else {\setbox0\lastbox}\fi \everypar{}}
+	\fi\ignorespaces}
+
+% Here is a trick for $BJ8;z<h$j(B of sectioning tilte.  The rule is;
+%	2 - 4 Kanji char -> 5 Kanji char
+%	otherwise    -> natural width
+%
+\def\sec@mojidori#1{\setbox0\hbox{#1}\settowidth\@tempdimb{$B$"(B}%
+	\ifdim\wd0>4.5\@tempdimb #1\else
+	\ifdim\wd0<1.5\@tempdimb #1\else
+	\jintercharskip\fill \jasciikanjiskip\fill \jmathkanjiskip\fill
+	\leavevmode\hbox to5\@tempdimb{#1\hfil}\fi\fi}
+
+%%%%%% List-like Environments %%%%%%
+%
+%		LM	RM	LW	LS	LPI	II
+% default	2K	0	0.75K	0.25K	0	0
+% \enumerate	3K	0	3K	0	0	0
+% \Enumerate	0	0	3K	0	0	3K
+% \ENUMERATE	0	0	3K	0	0	4K
+% \enumerate*	1K	0	3K	0	0	2K
+% \itemize	2K	0	2K	0	0	0
+% \Itemize	0	0	2K	0	0	2K
+% \ITEMIZE	0	0	2K	0	0	3K
+% \itemize*	1K	0	2K	0	0	1K
+% \description	2K	0	0	1K	0	-1K
+% \Description	0	0	0	1K	0	1K
+% \DESCRIPTION	0	0	0	1K	0	2K
+% \description*	1K	0	0	1K	0	0
+% \verse	3K	2K	0.75K	0.25K	-1K	-1K
+% \quotation	2K	2K	0.75K	0.25K	1K	1K
+% \quote	2K	2K	0.75K	0.25K	0	0
+%
+% where LM is \leftmargin, RM is \rightmargin, LW is \labelwidth, LS is
+% \labelsep, \LPI is \listparindent, II is \itemindent, and K is Kanji char
+% width (\@mojihaba).
+%
+% All vertical space parameters, \topsep, \partopsep, \itemsep and \parsep,
+% are 0pt.
+
+\leftmargini2\@mojihaba
+\leftmarginii2\@mojihaba
+\leftmarginiii2\@mojihaba
+\leftmarginiv2\@mojihaba
+\leftmarginv2\@mojihaba
+\leftmarginvi2\@mojihaba
+
+\def\lst@listi{\labelsep.75\@mojihaba \labelwidth.25\@mojihaba
+	\rightmargin\z@ \listparindent\z@ \itemindent\z@
+	\partopsep\z@ \parsep\z@ \topsep\z@ \itemsep\z@}
+\def\@listi{\leftmargin\leftmargini \lst@listi}
+\def\@listii{\leftmargin\leftmarginii \lst@listi}
+\def\@listiii{\leftmargin\leftmarginiii \lst@listi}
+\def\@listiv{\leftmargin\leftmarginiv \lst@listi}
+\def\@listv{\leftmargin\leftmarginv \lst@listi}
+\def\@listvi{\leftmargin\leftmarginvi \lst@listi}
+
+\@listi
+
+\def\labelenumi{(\,\theenumi\,)} 
+\def\theenumi{\arabic{enumi}} 
+\def\labelenumii{(\,\theenumii\,)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{(\,\theenumiii\,)}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{(\,\theenumiv\,)}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
+	\advance\@enumdepth \@ne 
+	\edef\@enumctr{enum\romannumeral\the\@enumdepth}
+	\list{\csname label\@enumctr\endcsname}{\usecounter
+		{\@enumctr}\def\makelabel##1{##1\hss}%
+		\leftmargin3\@mojihaba \labelwidth3\@mojihaba \labelsep\z@}\fi}
+\let\endenumerate\endlist
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+\def\itemize{\ifnum \@itemdepth >3 \@toodeep\else \advance\@itemdepth \@ne
+	\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+	\list{\csname\@itemitem\endcsname}{\def\makelabel##1{\hss##1\hss}%
+		\labelwidth2\@mojihaba \labelsep\z@}\fi}
+\let\enditemize\endlist
+
+\def\description{\list{}{\labelwidth\z@ \labelsep\@mojihaba
+	\itemindent\labelsep \advance\itemindent-\leftmargin
+	\def\makelabel##1{\bf ##1}}}
+\let\enddescription\endlist
+
+\let\latex@trivlist\@trivlist
+\def\lst@trivlist#1#2{\leftmargin#1\relax
+	\itemindent\labelwidth \advance\itemindent\labelsep
+	\advance\itemindent#2\relax
+	\let\@trivlist\latex@trivlist \@trivlist}
+
+\def\lst@Trivlist{\def\@trivlist{\lst@trivlist\z@\z@}}
+\def\Enumerate{\lst@Trivlist \enumerate}
+\let\endEnumerate\endlist
+\def\Itemize{\lst@Trivlist \itemize}
+\let\endItemize\endlist
+\def\Description{\lst@Trivlist \description}
+\let\endDescription\endlist
+
+\def\lst@TRIVLIST{\def\@trivlist{\lst@trivlist\z@\@mojihaba}}
+\def\ENUMERATE{\lst@TRIVLIST \enumerate}
+\let\endENUMERATE\endlist
+\def\ITEMIZE{\lst@TRIVLIST \itemize}
+\let\endITEMIZE\endlist
+\def\DESCRIPTION{\lst@TRIVLIST \description}
+\let\endDESCRIPTION\endlist
+
+\def\lst@strivlist{\def\@trivlist{\lst@trivlist\@mojihaba{-\@mojihaba}}}
+\@namedef{enumerate*}{\lst@strivlist \enumerate}
+\@namedef{endenumerate*}{\endlist}
+\@namedef{itemize*}{\lst@strivlist \itemize}
+\@namedef{enditemize*}{\endlist}
+\@namedef{description*}{\lst@strivlist \description}
+\@namedef{enddescription*}{\endlist}
+
+\def\verse{\let\\=\@centercr 
+	\list{}{\itemindent-\@mojihaba \listparindent\itemindent 
+	\rightmargin\leftmargin \advance\leftmargin\@mojihaba}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent\@mojihaba	\itemindent\listparindent
+	\rightmargin\leftmargin}\item[]}
+\let\endquotation\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote\endlist
+
+\def\newtheorem{\@ifstar
+	{\theo@newtheorem{\theo@it}{\ }}{\theo@newtheorem{}{\theo@sp}}}
+\def\theo@newtheorem#1#2#3{\@namedef{theo@it@#3}{#1}\@namedef{theo@sp@#3}{#2}%
+	\@ifnextchar[%]
+		     {\@othm{#3}}{\@nthm{#3}}}
+\def\@begintheorem#1#2{\DESCRIPTION \csname theo@it@\@currenvir\endcsname
+	\item[#1\csname theo@sp@\@currenvir\endcsname #2]}
+\def\@opargbegintheorem#1#2#3{\DESCRIPTION
+	\csname theo@style@\@currenvir\endcsname
+	\item[#1\csname theo@sp@\@currenvir\endcsname #2\ (#3)]}
+\let\@endtheorem\endlist					% 1.02(2)
+\ifDS@english
+\let\theo@it\it \let\theo@sp\ %
+\else
+\let\theo@it\relax \let\theo@sp\relax
+\fi
+
+%%%%%% Bibliography %%%%%%
+%
+% 1. Label format is "<nn>)".
+% 2. \leftmargin 24Q (or 2K)
+% 3. \labelsep is 6Q (or 0.5K)
+% 4. \baselineskip is 16Q(j)/15Q(e)/normal(d)
+% 5. ~ and \ can be shrunk to 0pt.
+
+\def\thebibliography#1{%
+	\section*{\hskip-\@mojihaba\hfill\hbox{\bib@refname}\hfill\hskip\z@}
+	\ifDS@draft \@tempdima\@mojihaba \else\@tempdima12\@Q\fi
+	\list{\arabic{enumi}\rlap{%(
+			   	  )}}%
+	     {\fs@bibliography \leftmargin2\@tempdima \labelwidth\z@
+		\labelsep\@tempdima \itemindent.5\@tempdima
+		\usecounter{enumi}\def\makelabel##1{\hss\llap{##1}}}
+	\def\newblock{\hskip .11em plus .33em minus .07em}
+	\sloppy \frenchspacing
+	\def\ {\hskip\fontdimen\tw@\font plus\fontdimen\thr@@\font
+			minus\fontdimen\tw@\font\relax}}
+\ifDS@english
+\def\bib@refname{References}
+\else
+{\fs@sec \@tempdima7\jspaceskip
+\xdef\bib@refname{\hbox to\the\@tempdima{\jintercharskip\fill $B;29MJ88%(B}}}
+\fi
+\newdimen\bib@adjustheight \bib@adjustheight-\maxdimen
+\def\endthebibliography{\endlist \par \@normalsize
+	\@tempdima\@colht \advance\@tempdima-\@colroom
+	\advance\@tempdima\pagetotal \advance\@tempdima-\prevdepth
+	\advance\@tempdima-\topskip
+	\@tempdimb\@tempdima \divide\@tempdima\baselineskip
+	\@tempcnta\@tempdima \@tempdima\@tempcnta\baselineskip
+	\advance\@tempdima-\@tempdimb
+	\ifdim\@tempdima<\z@ \advance\@tempdima\baselineskip \fi
+	\vskip-\prevdepth \vskip\@tempdima \prevdepth\z@
+	\bib@adjustheight\@tempdimb \advance\bib@adjustheight\@tempdima
+	\global\advance\bib@adjustheight\topskip
+	\if@firstcolumn\else\global\advance\bib@adjustheight\@M pt\fi}
+
+
+%%%%%% Floats %%%%%%
+
+% You may need to change following parameters
+\setcounter{topnumber}{4}
+\setcounter{bottomnumber}{4}
+\setcounter{totalnumber}{8}
+\setcounter{dbltopnumber}{4}
+\def\topfraction{.9}
+\def\bottomfraction{.9}
+\def\textfraction{.1}
+\def\dbltopfraction{.9}
+\def\floatpagefraction{.9}
+\def\dblfloatpagefraction{.9}
+
+\newcounter{figure}
+\newcounter{table}
+\def\thefigure{\@arabic\c@figure}
+\def\thetable{\@arabic\c@table}
+\def\fps@figure{tbp}
+\def\fps@table{tbp}
+\def\ftype@figure{1}
+\def\ftype@table{2}
+\def\fnum@figure{\fname@figure\thefigure}
+\def\fnum@table{\fname@table\thetable}
+\ifDS@english
+\def\fname@figure{Fig.\,}					% 2.06(1)
+\def\fname@Figure{Figure~}
+\def\fname@table{Table~}
+\else
+\def\fname@figure{$B?^(B\fref@nobreak}				% 1.06(1)
+\let\fname@Figure\fname@figure
+\def\fname@table{$BI=(B\fref@nobreak}				% 1.06(1)
+\fi
+\def\fnum@efigure{Fig.\,\thefigure}				% 2.06(1)
+\def\fnum@etable{Table~\thetable}
+
+% 1.06(3) >>
+\def\figure{\let\cap@afterskip\relax \let\flt@fontsize\relax \@float{figure}}
+\def\endfigure{\end@float}
+\@namedef{figure*}{\let\cap@afterskip\relax \let\flt@fontsize\relax
+	\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+%% Default font for table env. is \footnotesize (H.N.)
+\def\table{\let\cap@beforeskip\relax \let\flt@fontsize\fs@table
+	\@float{table}}
+\def\endtable{\end@float}
+\@namedef{table*}{\let\cap@beforeskip\relax \let\flt@fontsize\fs@table
+	\@dblfloat{table}}					% 2.01(2)
+\@namedef{endtable*}{\end@dblfloat}
+% 1.06(3) <<
+
+\let\latex@float\@float
+\let\latex@dbflt\@dbflt
+\def\@float{\cap@linewidth\hsize \cap@hsize\hsize \latex@float}
+\def\@dbflt{\cap@linewidth.8\textwidth \cap@hsize.667\textwidth \latex@dbflt}
+\let\latex@xfloat\@xfloat					% 1.06(3)
+\def\@xfloat#1[#2]{\latex@xfloat#1[#2]\flt@fontsize}
+								% 1.06(3)
+\def\end@float{\flt@endfloat
+	\ifdim\bib@adjustheight=-\maxdimen\else
+		\advance\bib@adjustheight\@tempdima
+		\global\advance\bib@adjustheight\baselineskip \fi
+	\ifnum\@floatpenalty <\z@
+		\@nameuse{@largefloatcheck}%			% 2.00(2)
+		\@cons\@currlist\@currbox
+	\ifdim \ht\@currbox >\textheight 
+		\ht\@currbox\textheight \fi
+	\ifnum\@floatpenalty < -\@Mii 
+        	\penalty -\@Miv 
+		\@tempdima\prevdepth \vbox{} \prevdepth\@tempdima
+		\penalty\@floatpenalty
+	\else \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@esphack
+	\fi\fi}
+\def\end@dblfloat{\if@twocolumn \flt@endfloat
+	\ifnum\@floatpenalty <\z@ \@cons\@dbldeferlist\@currbox\fi
+	\ifnum \@floatpenalty =-\@Mii \@esphack\fi\else\end@float\fi}
+\def\flt@endfloat{\par \vskip\z@
+	\global\@minipagefalse \@nameuse{outer@nobreak}\egroup	% 2.00(2)
+	\@nameuse{color@endbox}\@normalsize			% 2.00(2)
+	\@tempdima\ht\@currbox \advance\@tempdima\dp\@currbox
+	\divide\@tempdima\baselineskip \@tempcnta\@tempdima
+	\advance\@tempcnta\@ne \@tempdima\@tempcnta\baselineskip
+	\global\setbox\@currbox\vbox to\@tempdima{\vfil\box\@currbox\vfil}}
+
+\def\cap@beforeskip{\nointerlineskip\vskip5pt}
+\def\cap@afterskip{\nointerlineskip\vskip5pt}
+\long\def\@caption#1[#2]#3{\par\begingroup
+	\fs@caption \cap@beforeskip
+	\@makecaption{{\bf \csname fnum@#1\endcsname}}{\ignorespaces#3}\par
+	\ifDS@english \cap@afterskip \fi
+	\endgroup}
+\def\ecaption{\@dblarg{\@ecaption\@captype}}
+\long\def\@ecaption#1[#2]#3{\par
+	\begingroup \fs@caption
+	\@makecaption{\csname fnum@e#1\endcsname}{\ignorespaces #3}\par
+	\cap@afterskip
+	\endgroup}
+
+\newif\ifcap@sw
+\newdimen\cap@linewidth
+\newdimen\cap@hsize
+\newcount\cap@prevgraf
+\newbox\cap@box
+\let\latex@label\label
+\long\def\@makecaption#1#2{\begingroup \gdef\cap@label{}\let\label\@gobble
+	\setbox0\hbox{#1\hskip\jspaceskip}
+	\advance\cap@linewidth-\wd0 \advance\cap@hsize-\wd0
+	\cap@makepar\cap@linewidth{#2}{\def\label##1{{%		    %1.03(1)
+		\def\protect{\noexpand\protect\noexpand}	    %1.03(1)
+		\xdef\cap@label{\cap@label\protect\label{##1}}}}}   %1.03(1)
+	\cap@swtrue
+	\ifnum\cap@prevgraf=\@ne
+		\setbox1\vbox{\unvcopy1\cap@getbox1
+			\ifhbox1 \global\setbox\cap@box\hbox{\unhbox1}
+			\ifdim\wd\cap@box>\cap@linewidth\else
+				\global\cap@swfalse \fi\fi}
+		\ifcap@sw\else
+			\cap@put{\vtop{\box\cap@box\hbox{}}}
+		\fi\fi
+	\ifcap@sw \cap@makepar\cap@hsize{#2}\relax
+	\ifnum\cap@prevgraf=\tw@
+		\setbox1\vbox{\unvcopy1\cap@getbox2\cap@getbox3
+			\ifhbox2\ifhbox3
+				\setbox2\hbox{\unhbox2}\setbox3\hbox{\unhbox3}
+				\ifdim\wd2>\cap@hsize\else
+				\ifdim\wd3>\cap@hsize\else
+				\global\cap@swfalse
+				\global\setbox\cap@box\vtop{\box3\box2\hbox{}}
+				\fi\fi\fi\fi}\fi
+	\ifcap@sw \setbox1\vtop{\hsize\cap@hsize
+		\@parboxrestore #2\par\hbox{}}\cap@put{\box1}
+	\else\cap@put{\box\cap@box}\fi
+	\fi
+	\endgroup \cap@label}
+\long\def\cap@makepar#1#2#3{\setbox1\vbox{\hsize#1\@parboxrestore
+	\rightskip\@flushglue \hfuzz\maxdimen
+	\exhyphenpenalty\z@ \finalhyphendemerits\z@
+	\let\@@par\cap@par \let\par\cap@par \global\cap@prevgraf\z@
+	#3#2\cap@par}}
+\let\cap@@par\@@par
+\def\cap@par{\cap@@par\global\advance\cap@prevgraf\prevgraf \prevgraf\z@}
+\def\cap@put#1{\hbox to\hsize{\hss\box0#1\hss}
+	\vskip-\baselineskip\prevdepth\z@}
+\def\cap@getbox#1{\@tempcnta10\relax\@whilenum\@tempcnta>0\do{%
+	\unskip\unkern\unpenalty\advance\@tempcnta\m@ne}\setbox#1\lastbox}
+
+\def\figref{\fref@ref\fname@figure}
+\def\Figref{\fref@ref\fname@Figure}
+\def\tabref{\fref@ref\fname@table}
+\let\Tabref\tabref
+\def\fref@ref#1{\@ifstar{\fref@sref{#1}}{\fref@iref\bf{#1}}}
+\def\fref@iref#1#2#3{{\@ifundefined{fref@r@#3}%
+	{#1#2\fref@doref{#3}\global\@namedef{fref@r@#3}{}}{#2\fref@doref{#3}}}}
+\def\fref@sref#1#2{#1\fref@doref{#2}}
+\def\fref@doref#1{{\let\null\relax\ref{#1}}}			% 1.06(2)
+\def\fref@nobreak{\nobreak\ifASCII\else\hskip\@@jasciikanjiskip\fi}
+								% 1.06(1)
+
+\def\fig@extraspace{3mm}					%1.04(4)
+\def\figspace#1{\vskip#1\vskip\fig@extraspace}			%1.04(4)
+
+%%%%%% Footnote %%%%%%
+
+%% The following codes are from pfnote.sty, by H. Nakashima of Kyoto Univ.,
+%% to reset footnote counter at the begining of every page. (H.N.)
+
+% 1.04(2c)>>
+\def\footnote{\@ifnextchar[%]
+	{\@xfootnote}{{\PF@adjustfnote \stepcounter{\@mpfn}%
+		\xdef\@thefnmark{\thempfn}}\@footnotemark\@footnotetext}}
+\def\footnotemark{\@ifnextchar[%]
+	{\@xfootnotemark}{{\PF@adjustfnote \stepcounter{footnote}%
+		\xdef\@thefnmark{\thefootnote}}\@footnotemark}}
+% 1.04(2c)<<
+
+\newcount\PF@fnotectr\global\PF@fnotectr=\z@
+\newcount\PF@page\global\PF@page=-\@M
+\def\PF@thepage{\number\c@page}
+\def\PF@adjustfnote{\global\advance\PF@fnotectr\@ne
+	\expandafter\ifx\csname PF@fn\number\PF@fnotectr\endcsname\relax
+		\global\c@footnote\z@\else
+	\expandafter\@tempcnta\csname PF@fn\number\PF@fnotectr\endcsname\relax
+	\ifnum\@tempcnta=\PF@page\else
+		\global\PF@page\@tempcnta \global\c@footnote\z@ \fi\fi
+% 1.04(2a)>>
+	\expandafter\ifx\csname PF@fnpage\number\PF@page\endcsname\relax \else
+	\expandafter\@tempcnta\csname PF@fnpage\number\PF@page\endcsname\relax
+								% 2.00(4)>>
+	\ifnum\@tempcnta>\tw@ \global\let\thefootnote\thefootnotemany
+	\else \global\let\thefootnote\thefootnoteord \fi\fi	% 2.00(4)<<
+	\@tempcnta\c@footnote \multiply\@tempcnta\@M
+	\advance\@tempcnta\PF@fnotectr
+	\if@filesw{\let\PF@thepage\relax
+		\xdef\@gtempa{\write\@auxout{\string\PF@fnpage
+		{\number\@tempcnta}{\PF@thepage}}}}%
+		\@gtempa\fi}
+% 1.04(2a)<<
+
+% 1.04(2a)>>
+\def\PF@fnpage#1#2{\@tempcnta#1\relax \@tempcntb\@tempcnta \divide\@tempcnta\@M
+	\expandafter\xdef\csname PF@fnpage#2\endcsname{\number\@tempcnta}
+	\multiply\@tempcnta\@M \advance\@tempcntb-\@tempcnta	
+	\global\@namedef{PF@fn\number\@tempcntb}{#2}}
+% 1.04(2a)<<
+%% End of quote from pfnote.sty. (H.N.)
+
+\long\def\@makefntext#1{\leftskip20\@Q
+	\noindent\llap{\@makefnmarkforfn\hskip-\scriptspace\hskip5\@Q}#1}
+								% 1.04(2e)
+\def\@makefnmarkstar{$^{\hbox{\tiny\fn@fontv\@thefnmark}}$}	% 1.04(2d)
+\def\@makefnmarkdagger{$\@thefnmark$}
+\let\@makefnmarkforfn\@makefnmarkstar
+
+\def\@makefnmark{\smash{\hbox{\scriptsize\fn@fontvi$^{\@thefnmark}$}}}
+								% 1.04(2d)
+						% smashed to make it
+						% zero height
+
+%% Awful definition of \thefootnote to put subsequent $B!y(B's. (H.N.)
+\def\thefootnote{\leavevmode\hbox{%
+	\ifcase\c@footnote\or $B!y(B\or $B!y!y(B\or $B!y!y!y(B\else \thefootnotemany\fi}}
+								% 1.04(2b)
+\def\thefootnotemany{\hbox{$B!y(B\hskip\z@\number\c@footnote}}	% 1.04(2b)
+								% 2.05(3)
+\let\thefootnoteord\thefootnote
+
+
+%%%%%% Citation %%%%%%
+
+%% The following codes for \cite are from overcite.sty by D. Arseneau, but
+%% modified for Trans. IPSJ (H.N.)
+%     O V E R C I T E . S T Y
+%
+%     version 3.2  (Mar 1993)
+%
+%     Compressed, sorted lists of superscript numerical citations.
+%     see also CITE.STY and DRFTCITE.STY
+%
+%     Copyright (C) 1989-1993 by Donald Arseneau
+%     These macros may be freely transmitted, reproduced, or modified for
+%     non-commercial purposes provided that this notice is left intact.
+%
+\def\cite{\protect\@p@cite}
+\def\@p@cite{\let\@citeY\@citey \@p@@cite}
+\def\Cite{\protect\@p@Cite}
+\def\@p@Cite{\let\@citeY\@Citey \@p@@cite}
+\def\@p@@cite{\@ifnextchar[%]
+		          {\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+\def\@citex[#1]#2{\@citeY{\@p@citen{#2}}\if@tempswa\space[#1]\fi}
+\def\@citey#1{\leavevmode\unskip\kern\z@$\let\@cite@tiestyle\scriptstyle
+%     								% 2.06(2)
+	\def\@cite@punct{,}\m@th^{\hbox{\scriptsize#1}}$\spacefactor\@m}
+\def\@Citey#1{\let\@cite@tiestyle\textstyle
+	\ifDS@english \def\@cite@punct{,\space\penalty\@highpenalty}%1.04(1)
+	\else\def\@cite@punct{$B!$(B}\fi#1\spacefactor\@m}		    %1.04(1)
+
+\def\@p@citen#1{%
+	\edef\@tempa{\@ignspaftercomma,#1, \@end, }%
+	\edef\@tempa{\expandafter\@ignendcommas\@tempa\@end}%
+	\if@filesw \immediate\write\@auxout{\string\citation{\@tempa}}\fi
+	\@tempcntb\m@ne \let\@h@ld\relax \let\@citea\@empty
+	\let\@celt\relax \def\@cite@list{}%			% 2.06(3)
+	\@for\@citeb:=\@tempa\do{\@make@cite@list}%
+	\@tempcnta\m@ne \let\@celt\@compress@cite \@cite@list
+	\@h@ld}
+\def\@ignspaftercomma#1, {\ifx\@end#1\@empty\else
+	#1,\expandafter\@ignspaftercomma\fi}
+\def\@ignendcommas,#1,\@end{#1}
+
+%(
+\let\@cite@rp)
+\chardef\@cite@escape`\\
+\def\@make@cite@list{%
+    \expandafter\let\expandafter\@B@citeB\csname b@\@citeb\endcsname
+    \ifx\@B@citeB\relax
+	\@citea {\bf ?}\@cite@rp \let\@citea\@cite@punct
+	\@latex@warning{Citation `\@citeb' on page \thepage\space undefined}%
+								% 2.00(3)
+	\global\@namedef{b@\@citeb}{{\bf ?}}%
+    \else
+	\ifcat \@cite@escape\ifnum\z@<0\@B@citeB \@cite@escape\else A\fi
+	    \@tempcnta\@B@citeB \relax
+	    \ifnum \@tempcnta>\@tempcntb
+		\edef\@cite@list{\@cite@list \@celt{\@B@citeB}}%
+		\@tempcntb\@tempcnta
+	     \else
+		\edef\@cite@list{\expandafter\@sort@celt\@cite@list\@gobble @}%
+		\fi
+	\else \@citea \@B@citeB \@cite@rp \let\@citea\@cite@punct
+    \fi\fi}
+
+\def\@sort@celt#1#2{\ifx \@celt #1% parameters are \@celt {num}
+	\ifnum #2<\@tempcnta % number goes later in list
+	    \@celt{#2}\expandafter\expandafter\expandafter\@sort@celt
+	\else \@celt{\number\@tempcnta}\@celt{#2}\fi\fi}
+
+\def\@compress@cite#1{\advance\@tempcnta\@ne
+	\ifnum #1=\@tempcnta
+		\ifx\@h@ld\relax \edef\@h@ld{\@citea #1\@cite@rp}%
+		\else \edef\@h@ld{\hbox{$\@cite@tiestyle\sim$}%
+			\penalty\@highpenalty #1\@cite@rp}\fi
+	\else \@h@ld \@citea #1\@cite@rp
+		\let\@h@ld\relax
+	\fi \@tempcnta#1\relax \let\@citea\@cite@punct}
+
+%% End of quote from overcite.sty. (H.N.)
+
+\def\multicite{\protect\@p@multicite}
+\def\@p@multicite#1#2{\@citey{\@p@citen{#1}$\scriptstyle\sim$\@p@citen{#2}}}
+\def\multiCite{\protect\@p@multiCite}
+\def\@p@multiCite#1#2{\@Citey{\@p@citen{#1}$\sim$\penalty\@highpenalty
+	\@p@citen{#2}}}
+
+
+%%%%%% Box Height Adjustment and Displayed Math %%%%%%
+
+\newbox\adj@boxa \newbox\adj@boxb
+\newdimen\adj@height
+\@tempdima\baselineskip \advance\@tempdima-\topskip
+\edef\adj@minaboveclearance{\the\@tempdima}
+\@tempdima\baselineskip \advance\@tempdima-1ex
+\edef\adj@maxaboveclearance{\the\@tempdima}
+\ifDS@english
+\setbox0\hbox{A}
+\else
+\setbox0\hbox{$B$"(B}
+\fi
+\@tempdima\baselineskip \advance\@tempdima-\ht0 \advance\@tempdima\dp0
+\edef\adj@bhd{\the\@tempdima}
+
+% 2.01(1) >>
+\def\adjustvboxheight{\ifinner \let\@tempa\relax
+	\let\endadjustvboxheight\relax \let\@endadjustvboxheight\relax
+	\else \let\@tempa\@adjustvboxheight \fi \@tempa}
+\def\@adjustvboxheight{\par\penalty\z@
+	\global\setbox\adj@boxa\vbox\bgroup\relax		% 1.01(3)
+	\let\@footnotetext\@mpfootnotetext			% 2.02(1)
+%								% 2.05(1)
+	\hsize\columnwidth}
+% 2.01(1) <<
+\def\endadjustvboxheight{\adj@closebox \adj@putbox
+	\ifvoid\@mpfootins\else\insert\footins{\unvbox\@mpfootins}\fi
+%								% 2.02(1)
+	\global\@ignoretrue\@endparenv}
+\def\adj@closebox{\egroup \normalsize \boxmaxdepth\@maxdepth	% 1.01(1,3)
+	\setbox\adj@boxa\vbox{\unvbox\adj@boxa}			% 1.01(3)
+	\adj@height\ht\adj@boxa
+	\advance\adj@height\adj@minaboveclearance\relax
+	\@tempdima\adj@height \divide\adj@height\baselineskip
+	\@tempcnta\adj@height \adj@height\@tempcnta\baselineskip
+	\ifdim\adj@height<\@tempdima \advance\adj@height\baselineskip\fi}
+\def\adj@putbox{\vskip-\prevdepth \prevdepth\z@ \vskip\baselineskip
+	\vspace*{-\baselineskip}\advance\@tempdima-\adj@height
+	\@tempdima-\@tempdima \advance\@tempdima\adj@minaboveclearance\relax
+	\@tempdimb\dp\adj@boxa
+	\ifdim\@tempdima>\adj@maxaboveclearance\relax
+		\advance\@tempdima-\@tempdimb \advance\@tempdima\adj@bhd\relax
+		\divide\@tempdima\tw@
+		\vbox to\adj@height{\vskip\@tempdima \box\adj@boxa \vss}
+	\else	\vbox to\adj@height{\vfil\box\adj@boxa\vskip-\@tempdimb}\fi}
+
+\newcount\adj@deadcycle
+\@namedef{adjustvboxheight*}{\adjustvboxheight}
+\@namedef{endadjustvboxheight*}{\@endadjustvboxheight}
+\def\@endadjustvboxheight{\global\adj@deadcycle10\relax
+	\@iendadjustvboxheight
+	\ifvoid\@mpfootins\else\insert\footins{\unvbox\@mpfootins}\fi
+%								% 2.05(2)
+	\global\@ignoretrue\@endparenv}
+\def\@iendadjustvboxheight{\adj@closebox
+	\ifnum\adj@deadcycle<\@ne
+	\ipsj@error{I cannot adjust too tall/deep box}{\@ehd}\fi    % 2.00(3)
+	\global\advance\adj@deadcycle\m@ne
+	\ifdim\pagegoal=\maxdimen
+		\@tempdimb\@colht \advance\@tempdimb-\topskip
+		\advance\@tempdimb\baselineskip
+	\else \@tempdimb\pagegoal
+		\advance\@tempdimb-\pagetotal \advance\@tempdimb-\pagedepth
+		\advance\@tempdimb\prevdepth \fi		% 1.01(4a)
+	\let\next\relax
+	\ifdim\adj@height<\@tempdimb \adj@putbox \else
+	\ifdim\adj@height=\@tempdimb \adj@putbox \else
+	\divide\@tempdimb\baselineskip \@tempcnta\@tempdimb	% 1.01(4b)>>
+	\@tempdimb\@tempcnta\baselineskip
+	\advance\@tempdimb-\adj@minaboveclearance\relax		% 1.01(4b)<<
+	\setbox\adj@boxa\vbox{\allowbreak\unvbox\adj@boxa}
+	\vbadness\@M \splittopskip\z@ \splitmaxdepth\@maxdepth	%1.01(1)
+	\setbox\@tempboxa\vsplit\adj@boxa to\@tempdimb
+	\setbox\adj@boxb\copy\adj@boxa
+	\setbox\@tempboxa\vbox{\unvbox\@tempboxa}
+	\@tempdimb\ht\@tempboxa \advance\@tempdimb\dp\@tempboxa
+	\ifdim\@tempdimb>\z@
+		\setbox\adj@boxa\vbox\bgroup\unvbox\@tempboxa
+		\adj@closebox \adj@putbox \newpage
+	\else \newpage \fi
+	\setbox\adj@boxa\vbox\bgroup\unvbox\adj@boxb
+	\let\next\@iendadjustvboxheight \fi\fi \next}
+
+\def\adj@eqindent{2\@mojihaba}
+\def\[{\adjustvboxheight\advance\@totalleftmargin\adj@eqindent\relax
+	\hbox to\hsize\bgroup\hskip\@totalleftmargin$\displaystyle}
+\def\]{$\hfill\egroup\endadjustvboxheight\@doendpe\ignorespaces} % 2.03(1)
+\def\equation{\refstepcounter{equation}\[}
+\def\endequation{\hfill\@eqnnum$\egroup\endadjustvboxheight}
+\def\theequation{\arabic{equation}}
+\def\@eqnnum{{\rm (\theequation)\hskip\@mojihaba}} 
+
+\def\adj@eqnlineskip{3pt}
+\def\adj@eqnlineskiplimit{2pt}
+\def\eqnarray{\futurelet\@tempa\adj@eqnarray}
+\def\adj@eqnarray{\ifx\@tempa[%]
+	\let\next\adj@ieqnarray\else\let\next\adj@xeqnarray\fi\next}
+\def\adj@ieqnarray[#1]{\@ifundefined{adj@xeqnarray#1}%
+	{\ipsj@warning{Unknown eqnarray option `#1'}\adj@xeqnarray}% 2.00(3)
+	{\@nameuse{adj@xeqnarray#1}}}
+\def\adj@xeqnarray{\adjustvboxheight
+	\advance\@totalleftmargin\adj@eqindent\relax
+	\stepcounter{equation}\let\@currentlabel=\theequation
+	\global\@eqnswtrue
+	\global\@eqcnt\z@\tabskip\z@\let\\=\@eqncr
+	\lineskip\adj@eqnlineskip \lineskiplimit\adj@eqnlineskiplimit \jot\z@
+	\halign to \hsize\bgroup\@eqnsel\hskip\@totalleftmargin
+		\hfil$\displaystyle{##}$&\global\@eqcnt\@ne	% 1.01(2)
+		\hfil$\displaystyle{}\mathrel{##}{}$\hfil
+		&\global\@eqcnt\tw@ $\displaystyle{##}$\hfil
+		\tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\adj@xeqnarrays{\let\endadjustvboxheight\@endadjustvboxheight
+	\adj@xeqnarray}
+\@namedef{adj@xeqnarrays!}{\par\let\adjustvboxheight\relax
+	\let\endadjustvboxheight\relax \adj@xeqnarray}
+\def\endeqnarray{\@@eqncr \egroup \global\advance\c@equation\m@ne
+	\endadjustvboxheight}
+
+
+%%%%%% Kinsoku Parameters %%%%%%
+
+% 1.04(3)>>
+\ifASCII
+\postbreakpenalty`\`=\@M
+\prebreakpenalty`'=\@M
+\prebreakpenalty`)=\@M
+\postbreakpenalty`(=\@M
+\prebreakpenalty`]=\@M
+\postbreakpenalty`[=\@M
+\prebreakpenalty`\}=\@M
+\postbreakpenalty`\{=\@M
+
+\prebreakpenalty`$B!&(B=\@M
+\prebreakpenalty`$B!'(B=\@M
+\prebreakpenalty`$B!((B=\@M
+\prebreakpenalty`$B!)(B=\@M
+\prebreakpenalty`$B!*(B=\@M
+
+\prebreakpenalty\jis"212D=\@M		% $B!-(B
+\postbreakpenalty\jis"212E=\@M		% $B!.(B
+\postbreakpenalty\jis"2146=\@M		% $B!F(B
+\prebreakpenalty\jis"2147=\@M		% $B!G(B
+\postbreakpenalty\jis"2148=\@M		% $B!H(B
+\prebreakpenalty\jis"2149=\@M		% $B!I(B
+
+\prebreakpenalty`$B!K(B=\@M
+\postbreakpenalty`$B!J(B=\@M
+\prebreakpenalty`$B!Q(B=\@M
+\postbreakpenalty`$B!P(B=\@M
+\prebreakpenalty`$B!O(B=\@M
+\postbreakpenalty`$B!N(B=\@M
+\postbreakpenalty`$B!F(B=\@M
+\prebreakpenalty`$B!G(B=\@M
+
+\postbreakpenalty\jis"214C=\@M		%$B!L(B
+\prebreakpenalty\jis"214D=\@M		% $B!M(B
+\postbreakpenalty\jis"2152=\@M		% $B!R(B
+\prebreakpenalty\jis"2153=\@M		% $B!S(B
+\postbreakpenalty\jis"2154=\@M		% $B!T(B
+\prebreakpenalty\jis"2155=\@M		% $B!U(B
+\postbreakpenalty\jis"2156=\@M		% $B!V(B
+\prebreakpenalty\jis"2157=\@M		% $B!W(B
+\postbreakpenalty\jis"2158=\@M		% $B!X(B
+\prebreakpenalty\jis"2159=\@M		% $B!Y(B
+\postbreakpenalty\jis"215A=\@M		% $B!Z(B
+\prebreakpenalty\jis"215B=\@M		% $B![(B
+
+\prebreakpenalty`$B$!(B=\@M
+\prebreakpenalty`$B$#(B=\@M
+\prebreakpenalty`$B$%(B=\@M
+\prebreakpenalty`$B$'(B=\@M
+\prebreakpenalty`$B$)(B=\@M
+\prebreakpenalty`$B$C(B=\@M
+\prebreakpenalty`$B$c(B=\@M
+\prebreakpenalty`$B$e(B=\@M
+\prebreakpenalty`$B$g(B=\@M
+\prebreakpenalty\jis"246E=\@M		% $B$n(B
+\prebreakpenalty`$B%!(B=\@M
+\prebreakpenalty`$B%#(B=\@M
+\prebreakpenalty`$B%%(B=\@M
+\prebreakpenalty`$B%'(B=\@M
+\prebreakpenalty`$B%)(B=\@M
+\prebreakpenalty`$B%C(B=\@M
+\prebreakpenalty`$B%c(B=\@M
+\prebreakpenalty`$B%e(B=\@M
+\prebreakpenalty`$B%g(B=\@M
+\prebreakpenalty\jis"256E=\@M		% $B%n(B
+\prebreakpenalty\jis"2575=\@M		% $B%u(B
+\prebreakpenalty\jis"2576=\@M		% $B%v(B
+
+\fi
+% 1.04(3)<<
+
+
+%%%%%% Miscellaneous %%%%%%
+
+%% \doublerulesep is 1pt (H.N.)
+\arraycolsep5pt \tabcolsep6pt \arrayrulewidth.4pt \doublerulesep1pt 
+\tabbingsep.5\@mojihaba
+
+\skip\@mpfootins\skip\footins
+\fboxsep3pt \fboxrule.4pt 
+
+%% We simply allow (not encourage) club and widow lines. (H.N.)
+\clubpenalty\z@ \widowpenalty\z@ \displaywidowpenalty\z@
+
+% The following redefinition influences \linebreak etc.
+\def\sloppy{\tolerance9999\hbadness9999\hfuzz.5\p@ \vfuzz.5\p@}
+
+\endinput
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsjpapers.cls	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,17 @@
+% Copyright (C) 1995,1996,1997,1998,1999,2000,2001
+%			by Hiroshi Nakashima, Yasuki Saito and
+%                          The Editorial Board of the IPSJ Journal
+%
+% ipsjpapers.cls 15-May-01 by Hiroshi Nakashima (ver 2.08)
+% (revision history deleted)
+% ipsjpapers.cls  1-Apr-96 by Hiroshi Nakashima (ver 2.00)
+
+\ifx\pfmtname\undefined
+\NeedsTeXFormat{LaTeX2e}
+\else
+\NeedsTeXFormat{pLaTeX2e}
+\fi
+
+\ProvidesClass{ipsjpapers}[2001/05/01 ver 2.08]
+\input{ipsjpapers.sty}
+\endinput
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsjpapers.sty	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,1810 @@
+% Copyright (C) 1995,1996 by Editorial Board of the Trans. IPSJ
+%
+% ipsjpapers.sty 16-Jul-96 by Hiroshi Nakashima (ver 2.01)
+% ipsjpapers.sty  1-Jun-96 by Hiroshi Nakashima (ver 2.00)
+% ipsjpapers.sty 22-Feb-96 by Hiroshi Nakashima (ver 1.06)
+% ipsjpapers.sty 16-Nov-95 by Hiroshi Nakashima (ver 1.05)
+% ipsjpapers.sty  2-Oct-95 by Hiroshi Nakashima (ver 1.04)
+% ipsjpapers.sty  1-Sep-95 by Hiroshi Nakashima (ver 1.03)
+% ipsjpapers.sty  4-Aug-95 by Hiroshi Nakashima (ver 1.02)
+% ipsjpapers.sty  6-Jul-95 by Hiroshi Nakashima (ver 1.01)
+% ipsjpapers.sty 24-Apr-95 by Hiroshi Nakashima (ver 1.0)
+% ipsjpapers.sty 30-Nov-93 by Hiroshi Nakashima
+% ipsjpapers.sty 3-Feb-93 by Yaski Saito
+% compsoft.sty 22-April-92 by Yaski Saito
+% compsoft.sty 18-July-90 by Hideki Isozaki 
+% j-article.sty 10-Feb-89 from report.sty 16-Mar-88
+
+% REVISION
+% ver 2.01 16-Jul-96 by Hiroshi Nakashima
+% (1) If a float column follows a page which has footnote in the same
+%     column, \footnoterule is mistakingly displayed.  To cope with it,
+%     \@vtryfc is modified so that \if@{left|right}footnoteexist is set to
+%     false (because a float column cannot have any footnotes.)
+%
+% ver 2.00  1-Jun-96 by Hiroshi Nakashima
+% (1) Introduce a new flag \if@LaTeX@eN which is true if LaTeX2e is used in
+%     native mode.  Now, ipsjpapers and related styles are compatible to
+%     LaTeX 2.09 and LaTeX2e (both native and compatible modes).  Note that
+%     LaTeX2e mode test cannot be done by \if@compatibility because it is
+%     not \let-equal to \iftrue/\iffallse in LaTeX 2.09.  LaTeX version
+%     check is moved to the beginning of the file.
+% (2) In 2e-native mode, options are declared by \DeclareOption and
+%     processed by related macros.  The banner is not put in native mode.
+% (3) Introduce \ipsj@warning and \ipsj@error which call \ClassWarning and
+%     \ClassError in 2e-native mode.  Since some warnings are put by
+%     \@latex@warning, it is \let-equal to \@warning in 2.09.
+% (4) In 2e, fonts are loaded using NFSS.  For ASCII-printer version,
+%     Japanese fonts are re-declared, except for some special fonts which
+%     are loaded out of NFSS.  In other cases, standard fonts are used
+%     rather than loading explicitly.
+% (5) To give aliases to a font, \ipsj@declare@font is introduced.
+% (6) Definitions of skips and macros for NTT/ASCII compatibility are moved
+%     in order to do them both in 2.09 and 2e.
+% (7) \defjintercharskip and its relatives, which are moved by 1.06(3), are
+%     moved again.  Since \ipsj@declare@font is used to specify font names
+%     and it loads fonts, \defintercharskip etc. should be work well.
+%     To cope with old NTT versions, \defintercharskip etc. and \setjglue are
+%     sorrounded by availability check.
+% (8) For 2e-native, \DeclareOldFontCommand's are added.  In 2e (incl.
+%     compatibility mode), \dm and \dg are \def'ed as \mc and \gt.
+% (9) In 2e, \vpt etc. (not \old@vpt etc.) are \let-equal to \old@somept.
+%(10) In 2e, \normalsize is \let-equal to \@normalsize.
+%(11) In 2e, redefinition of \bf may not work well.  So, it is done in 2.09
+%     only.
+%(12) In 2e, \@makecol has \color@begingroup/endgroup and some codes for
+%     \enlargethispage.  Since they are useless/harmful for ipsjpapers, they
+%     are omitted and \enlargethispage is redefined to put a warning.
+%(13) In ASCII 2e (older than <1996/03/05>), \@outputpage has a bug which
+%     nullifies \topmargin.  A straightforward fix, set \@@topmargin to
+%     \topmargin, for the bug is added in our own \@outputpage.
+%(14) Since 2e-native doesn't have \@maxsep and \@dblmaxsep, they are
+%     \let-equal to a dummy skip register \old@latex@skip.
+%(15) `Jun.' and `Jul.' in \@monthyear are replaced with `June' and `July'
+%     respectively to meet the format tradition.
+%(16) \pageref should show the value of \c@volpage rather than \c@page.  To
+%     cope with it easily, \c@page is set to \c@volpageoffset in \document.
+%     Thus, now \c@volpage and \thevolpage are useless and are replaced with
+%     \c@page and \thepage.  The trick to flip odd/even page in
+%     \@outputpage, which was introduced in ver 1.04(2), is removed because
+%     it is no longer necessary (but harmful now).
+%
+% ver 1.06 22-Feb-96 by Hiroshi Nakashima
+% (1) Introduce a new flag \if@LaTeX@e which is true if LaTeX2e is used.
+%     Although this modification is to cope with LaTeX2e, of course, note
+%     that this version may NOT be compatible to LaTeX2e but is (hopefully)
+%     compatible to its LaTeX 2.09 compatible mode.
+% (2) \jfsize is available only in NTT jTeX-1.5 (or older versions).  Thus,
+%     \newcount\jfsize is done if it is \undefined.  The \newcount in
+%     \ifASCII section in "Fonts" becomes redundant and thus is removed.
+% (3) In NTT version, the first \@normalsize seems to reset special Kanji
+%     skips.  Thus, \defjintercharskip and \setjglues are moved below the
+%     first \@normalsize.  The shrink of \@@jintercharskip is set to 0.5pt
+%     (0.14pt before) to avoid frequent overfulls.  \defjasciikanjiskip and
+%     \defjmathkanjiskip are added to set corresponding skips to the values
+%     similar to the value of \xkanjiskip.
+% (4) LaTeX2e's \@setsize doesn't expand its 3rd argument (e.g. \xpt), but
+%     this expansion is necessary to chage the combinations of CM and Kanji
+%     fonts.  Thus, \@setsize is redefined so that it expand its 3rd
+%     argument after \@setfontsize is executed.  However, since this
+%     expansion is only necessary for the combination change, \old@vpt and
+%     its relatives, which are called in our own \vpt and relatives, don't
+%     have to do anything except for setting \jspaceskip to 1zw in ASCII
+%     version.
+% (5) \boldmath for 9pt fonts are available in LaTeX2e, and 2.09 style
+%     \(un)boldmath definition is incomatible.  Thus, \@ixptboldmath is set
+%     to \relax.
+% (6) \pbf (and its relatives) is not available in LaTeX2e.  Since \bf is
+%     definied and well-protected in both LaTeX2e and 2.09, our own \bf can
+%     expand LaTeX's \bf in its body.  Note that \dg in \bf's body works
+%     well because; (a) \dg is defined as \protect\pdg in ASCII and NTT-2.09;
+%     (b) \dg does "normal" operation in NTT-2e but CM/Kanji combination in
+%     NTT is also "normal".
+%
+% ver 1.05 16-Nov-95 by Hiroshi Nakashima
+% (1) Set \lineskiplimit to \normallineskiplimit at the beginning of
+%     \@makecol to fix a bug of LaTeX 2.09.  \lineskiplimit may set some
+%     unusually small value (e.g. -\maxdimen in \ooalign) at a critical
+%     timing at which \output routine is invoked.
+% (2) New document style option `techrep' is introduced for SIG technical
+%     reports.  This style is different from the default in the following
+%     points:
+%     (a) \baselineskip for \normalsize is 17Q in both Japanese/English.
+%     (b) \textheight is 50\baselineskip+\topskip (i.e. 51 lines) in both
+%         Japanese/English.  Other page layout parameters are those for
+%         Japanese default.
+%     (c) Page headers/footers are always empty.
+%     (d) Page corner markers are always printed.
+%     (e) Page number is put below the bottom margin.
+%     (f) \hrule at the bottom of final page is omitted.
+%
+% ver 1.04 2-Oct-95 by Hiroshi Nakashima
+% (1) As usual footnotes, if four or more affiliations are declared,
+%     footnote marks for them are \dagger1, \dagger2, \dagger3, \dagger4,
+%     ..., instead of \dagger, \dagger\dagger, \dagger\dagger\dagger,
+%     \dagger\dagger\dagger\dagger, ..., in order to keep marks from
+%     invading into margins.  To do this, footnote mechanism is drastically
+%     changed as follows:
+%     (a) \stepcounter{affi@footnote} is added into \affilabel to count
+%         number of declarations.  The value of counter is referred in
+%         \@maketitle just before it calls \@affilabels to choose usual
+%         style of new style for four or more declarations.  If the value is
+%         greater than 3, \theaffi@footnote is made \let equal to
+%         \theaffi@footnotemany.
+%     (b) \theaffi@footnotemany, which produces ``\dagger<n>'' where <n> is
+%         affiliation number, is added.  Four and five sequence of \dagger's
+%         in \theaffi@footnote is removed.
+%     (c) \dagger's in \theaffi@footnote are enclosed in { and } in order to
+%         keep it from acting Bin operator and avoid extra spaces.  This and
+%         1.04(2e) of ipsjcommon keep three \dagger's from invading into
+%         margin. 
+%     (d) In \affi@label, space after ``$B8=:_(B'' for presen affiliation is
+%         replaced by Japanese comma.
+% (2) In \@outputpage, \@oddhead and \@evenhead are exchanged if
+%     volpageoffset is even, so that headers for a paper which starts from
+%     even page are put properly.
+% (3) Definitions for standerd pt-size options are added to cope with some
+%     style files (e.g. amssymbol) which refer these definitions.
+%
+% ver 1.03 1-Sep-95 by Hiroshi Nakashima
+% (1) \tenmib, \tensyb and \tenlyb in \@ixptboldmath for non-printer version
+%     are replaced with \ninmib, \ninsyb and \ninlyb repectively.  In old
+%     version, 10pt \boldmath will misunderstand that it has already been
+%     called if 9pt \boldmath was called and defined \tenmib.
+%
+% ver 1.02 4-Aug-95 by Hiroshi Nakashima
+% (1) Add copyright.
+% (2) Make \boldmath available for \ixpt (Japanese \normalsize).  With
+%     printer option, \boldmath uses scale 900 10pt bold math fonts.
+%     Without printer option, it uses 10pt bold math fonts.
+%
+% ver 1.01, 6-Jul-95 by Hiroshi Nakashima
+% (1) \maxdepth=0pt in \@addtobot is removed.  This operation is
+%     unnecessary because we have enough space (= \baselineskip) between
+%     main text and bottom figures.  This modification will usually add one
+%     more line to a page having bottom figures.  Note that this
+%     modification is not incorporated into "ipsjdrafts", because adding one
+%     line to a draft page is not urgently required.
+% (2) \@combinefloats is modified in order to cancel the depth of main text
+%     if a page has bottom figures.  This modification avoids overfull in
+%     output routine which would be caused by the revision (1).
+% (3) \maxdepth in \@outputdoublecol is replaced with \@maxdepth.  This
+%     modification, however, will be redundant.
+
+%%%%%% LaTeX Version %%%%%%
+
+% 2.00(1) >>
+%% \ifASCII is true if ASCII version Japanese TeX, which doesn't have
+%% \jintercharskip (H.N.)
+\newif\ifASCII \ASCIIfalse
+\ifx\jintercharskip\undefined\ASCIItrue\fi
+\newif\if@LaTeX@e \@LaTeX@efalse				% 1.06(1)
+\newif\if@LaTeX@eN \@LaTeX@eNfalse				% 2.00(1)
+\def\@tempa{LaTeX2e}						% 1.06(1)
+\ifx\fmtname\@tempa \@LaTeX@etrue				% 1.06(1)
+\ifx\xpt\undefined \@LaTeX@eNtrue \fi\fi			% 2.00(1)
+% 2.00(1) <<
+
+
+%%%%%% Document Styles %%%%%%
+
+% 2.00(2) >>
+\newif\ifDS@printer \DS@printerfalse
+\newif\ifDS@english \DS@englishfalse
+\newif\ifDS@technote \DS@technotefalse
+\newif\ifDS@preface \DS@prefacefalse
+\newif\ifDS@draft \DS@draftfalse
+\newif\ifDS@techrep \DS@techrepfalse				% 1.05(2)
+
+\if@LaTeX@eN
+\DeclareOption{printer}{\DS@printertrue}
+\DeclareOption{english}{\DS@englishtrue}
+\DeclareOption{technote}{\DS@technotetrue}
+\DeclareOption{preface}{\DS@prefacetrue}
+\DeclareOption{draft}{\DS@drafttrue}
+\DeclareOption{techrep}{\DS@techreptrue}
+\DeclareOption{10pt}{\def\@ptsize{0}}
+\DeclareOption{11pt}{\def\@ptsize{1}}
+\DeclareOption{12pt}{\def\@ptsize{2}}
+\ExecuteOptions{10pt}
+\ProcessOptions
+\def\ipsj@warning{\ClassWarning{ipsjpapers}}			% 2.00(3)
+\def\ipsj@error{\ClassError{ipsjpapers}}			% 2.00(3)
+\newskip \old@latex@skip					% 2.00(14)
+\let\@maxsep\old@latex@skip					% 2.00(14)
+\let\@dblmaxsep\old@latex@skip					% 2.00(14)
+
+\else
+\expandafter\ifx\csname ver@ipsjpapers.cls\endcsname\relax
+\typeout{Document Style `ipsjpapers' (ver 2.01) <16 Jul 96>.}
+\fi
+
+\def\ds@printer{\DS@printertrue}
+\def\ds@english{\DS@englishtrue}
+\def\ds@technote{\DS@technotetrue}
+\def\ds@preface{\DS@prefacetrue}
+\def\ds@draft{\DS@drafttrue}
+\def\ds@techrep{\DS@techreptrue}				% 1.05(2)
+
+% 1.04(3)>>
+\def\@ptsize{0}
+\@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}} 
+% 1.04(3)<<
+
+\@options
+\let\ipsj@warning\@warning					% 2.00(3)
+\let\@latex@warning\@warning					% 2.00(3)
+\def\ipsj@error#1#2{\errhlp{#2}\errmessge{#1}}			% 2.00(3)
+\fi
+% 2.00(2) <<
+
+
+%%%%%% Basics %%%%%%
+
+\newdimen\@Q \@Q=0.25mm
+
+\lineskip\z@ \normallineskip\z@ 
+\lineskiplimit\z@ \normallineskiplimit\z@
+\abovedisplayskip\z@ \belowdisplayskip\z@
+\abovedisplayshortskip\z@ \belowdisplayshortskip\z@
+
+\def\baselinestretch{1}
+\jot\z@ 
+
+\ifDS@draft\def\next{\input{ipsjdrafts.sty}\endinput}\else\let\next\relax\fi
+\next
+
+\@twosidetrue
+
+%%%%%% Fonts %%%%%%
+% \finvedm(dg)		dm5		\vpt	\tiny		fn-mark
+% \sixdm(dg)		dm6		\vipt	\scriptsize
+% \sevendm(dg)		dm7		\vipt	\footnotesize	f-note, capt
+%	10Q = 7.11304pt -> w(min7) = 6.73550pt
+% \eightdm(dg)		dm8		\viiipt	\small		abst, header
+%	11Q = 7.82434pt -> w(min8) = 7.69772pt
+% \eightdm(dg)half	dm9		\ixpt	\normalsize	main text
+%	12Q = 8.53564pt -> w(min9) = 8.65994
+% \tendm(dg)		dm10		\xpt	\large		sec title
+%	13Q = 9.24695pt -> w(min10) = 9.62216pt
+% \tendm(dg)half	dm10*1095	\xipt	\Large		author names
+%	15Q =10.66956pt -> w(min10*1095) = 10.53625pt
+% (\twlvdm)		(dm12)		\xiipt	\LARGE		e-title
+% \twelvedm(dg)half	dm12*1095	\xivpt	\huge		title
+%			min10*1440
+%	18Q =12.80347pt -> w(min10*1440) = 13.8559pt
+%
+% Note that cm fonts follows LaTeX standard. (e.g. \viiipt -> cmr8, etc.)
+
+% 2.00(4)>>
+\if@LaTeX@e
+\ifASCII
+\def\ipsj@declare@font#1#2#3{{\fontsize{#3}{\z@}#2\selectfont	    % 2.00(5)>>
+	\edef\@tempa{\the\jfont}
+	\expandafter\global\expandafter\let\expandafter#1\@tempa}}  % 2.00(5)<<
+
+\ifDS@printer	% ASCII LaTeX2e printer
+\DeclareFontShape{JY1}{mc}{m}{n}{%
+	<5>	sfixed*	[5.175]	min5	% 7Q/w5 = 4.97922/4.81108=1.035
+	<6>	sfixed*	[5.916]	min6	% 8Q/w6 = 5.69055/5.77328=0.986
+	<7>	sfixed*	[7.392]	min7	%10Q/w7 = 7.11304/6.73550=1.056
+	<8>	sfixed*	[8.128]	min8	%11Q/w8 = 7.82434/7.69772=1.016
+	<9>	sfixed*	[8.872]	min8	%12Q/w8 = 8.53564/7.69772=1.109
+	<10>	sfixed*	[9.610]	min10	%13Q/w10= 9.24695/9.62216=0.961
+	<10.95>	sfixed*	[11.09]	min10	%15Q/w10=10.66956/9.62216=1.109
+	<12>	sfixed*	[11.83]	min10	%16Q/w10=11.38110/9.62216=1.183
+	<14.4>	sfixed*	[13.31]	min10	%18Q/w10=12.80347/9.62216=1.331
+}{}
+\DeclareFontShape{JY1}{gt}{m}{n}{%
+	<5>	sfixed*	[5.175]	goth5	% 7Q/w5 = 4.97922/4.81108=1.035
+	<6>	sfixed*	[5.916]	goth6	% 8Q/w6 = 5.69055/5.77328=0.986
+	<7>	sfixed*	[7.392]	goth7	%10Q/w7 = 7.11304/6.73550=1.056
+	<8>	sfixed*	[8.128]	goth8	%11Q/w8 = 7.82434/7.69772=1.016
+	<9>	sfixed*	[8.872]	goth8	%12Q/w8 = 8.53564/7.69772=1.109
+	<10>	sfixed*	[9.610]	goth10	%13Q/w10= 9.24695/9.62216=0.961
+	<10.95>	sfixed*	[11.09]	goth10	%15Q/w10=10.66956/9.62216=1.109
+	<12>	sfixed*	[11.83]	goth10	%16Q/w10=11.38110/9.62216=1.183
+	<14.4>	sfixed*	[13.31]	goth10	%18Q/w10=12.80347/9.62216=1.331
+}{}
+
+\ipsj@declare@font\fn@fontvii\mcfamily\@vpt
+
+%% The following fonts are out of NFSS scheme
+\font\fn@fontv		min5	scaled739	% 5Q/w5 = 3.55658/4.81108=0.739
+\font\fn@fontvi		min5	scaled887	% 6Q/w5 = 4.26790/4.81108=0.887
+\font\fn@fontxv		goth10  scaled1035	%14Q/w10= 9.95846/9.62216=1.035
+
+\else		% ASCII LaTeX2e non-printer
+\ipsj@declare@font\fn@fontv\mcfamily\@vpt
+\ipsj@declare@font\fn@fontvi\mcfamily\@vpt
+\ipsj@declare@font\fn@fontvii\mcfamily\@vpt
+\ipsj@declare@font\fn@fontxv\gtfamily\@xipt
+\fi
+
+\else		% NTT LaTeX2e
+\def\ipsj@declare@font#1#2#3{{\fontsize{#3}{\z@}#2\selectfont	    % 2.00(5)
+	\xdef#1{\expandafter\noexpand\csname\jf@ntn@me\endcsname}}} % 2.00(5)
+\ipsj@declare@font\fn@fontv\dm\@vpt
+\ipsj@declare@font\fn@fontvi\dm\@vpt
+\ipsj@declare@font\fn@fontvii\dm\@vpt
+\ipsj@declare@font\fn@fontxv\dg\@xipt
+\fi
+% 2.00(4) <<
+
+\else		% LaTeX 2.09					% 2.00(4)
+%% Fonts for ASCII TeX. (H.N.)
+\ifASCII
+\ifDS@printer
+\font\fn@fontv		min5	scaled739	% 5Q/w5 = 3.55658/4.81108=0.739
+\font\fn@fontvi		min5	scaled887	% 6Q/w5 = 4.26790/4.81108=0.887
+\font\fivedm		min5	scaled1035	% 7Q/w5 = 4.97922/4.81108=1.035
+\font\fivedg		goth5	scaled1035
+\font\sixdm		min6	scaled986	% 8Q/w6 = 5.69055/5.77328=0.986
+\font\sixdg		goth6	scaled986
+\font\sevendm		min7	scaled1056	%10Q/w7 = 7.11304/6.73550=1.056
+\font\sevendg		goth7	scaled1056
+\font\eightdm		min8	scaled1016	%11Q/w8 = 7.82434/7.69772=1.016
+\font\eightdg		goth8	scaled1016
+\font\eightdmhalf	min8	scaled1109	%12Q/w8 = 8.53564/7.69772=1.109
+\font\eightdghalf	goth8	scaled1109
+\font\tendm		min10	scaled961	%13Q/w10= 9.24695/9.62216=0.961
+\font\tendg		goth10  scaled961
+\font\fn@fontxv		goth10  scaled1035	%14Q/w10= 9.95846/9.62216=1.035
+\font\tendmhalf		min10	scaled1109	%15Q/w10=10.66956/9.62216=1.109
+\font\tendghalf		goth10	scaled1109
+\font\twelvedm		min10	scaled1183	%16Q/w10=11.38110/9.62216=1.183
+\font\twelvedg		goth10	scaled1183
+\font\twelvedmhalf	min10	scaled1331	%18Q/w10=12.80347/9.62216=1.331
+\font\twelvedghalf	goth10	scaled1331
+\let\fn@fontvii\fivedm
+
+\else
+\font\fivedm		min5
+\font\fivedg		goth5
+\font\sixdm		min6
+\font\sixdg		goth6
+\font\sevendm		min7
+\font\sevendg		goth7
+\font\eightdm		min8
+\font\eightdg		goth8
+\font\eightdmhalf	min9
+\font\eightdghalf	goth9
+\font\tendm		min10
+\font\tendg		goth10
+\font\tendmhalf		min10 scaled\magstephalf
+\font\tendghalf		goth10 scaled\magstephalf
+\font\twelvedm		min10 scaled\magstep1
+\font\twelvedg		goth10 scaled\magstep1
+\font\twelvedmhalf	min10 scaled\magstep2
+\font\twelvedghalf	goth10 scaled\magstep2
+\let\fn@fontv\fivedm
+\let\fn@fontvi\fivedm
+\let\fn@fontvii\fivedm
+\let\fn@fontxv\tendghalf
+
+\fi
+
+%% ASCII doesn't have \old@Npt. (H.N.)
+\let\old@@vpt\vpt
+\let\old@@vipt\vipt
+\let\old@@viipt\viipt
+\let\old@@viiipt\viiipt
+\let\old@@ixpt\ixpt
+\let\old@@xpt\xpt
+\let\old@@xipt\xipt
+\let\old@@xiipt\xiipt
+\let\old@@xivpt\xivpt
+
+\def\old@vpt{\old@@vpt\jspaceskip1zw\relax}
+\def\old@vipt{\old@@vipt\jspaceskip1zw\relax}
+\def\old@viipt{\old@@viipt\jspaceskip1zw\relax}
+\def\old@viiipt{\old@@viiipt\jspaceskip1zw\relax}
+\def\old@ixpt{\old@@ixpt\jspaceskip1zw\relax}
+\def\old@xpt{\old@@xpt\jspaceskip1zw\relax}
+\def\old@xipt{\old@@xipt\jspaceskip1zw\relax}
+\def\old@xiipt{\old@@xiipt\jspaceskip1zw\relax}
+\def\old@xivpt{\old@@xivpt\jspaceskip1zw\relax}
+
+								% 2.00(6)
+								% 1.06(2)
+
+%% ASCII doesn't have \dg nor \dm. (H.N.)
+\def\dg{\protect\pdg}
+\def\dm{\protect\pdm}
+%% Redefine \gt and \mc
+\def\gt{\protect\pdg}
+\def\mc{\protect\pdm}
+\let\pdm\relax
+
+\else
+%% Fonts for NTT jTeX
+%% \magstephalf and \magstep1 may cause trouble in older versions.
+
+\jfont\fivedm=dm5
+\jfont\fivedg=dg5
+\jfont\sixdm=dm6
+\jfont\sixdg=dg6
+\jfont\sevendm=dm7
+\jfont\sevendg=dg7
+\jfont\eightdm=dm8
+\jfont\eightdg=dg8
+\jfont\eightdmhalf=dm9
+\jfont\eightdghalf=dg9
+\jfont\tendm=dm10
+\jfont\tendg=dg10
+\jfont\tendmhalf=dm10 scaled 1095
+\jfont\tendghalf=dg10 scaled 1095
+\jfont\twelvedm=dm12
+\jfont\twelvedg=dg12
+\jfont\twelvedmhalf=dm12 scaled 1095
+\jfont\twelvedghalf=dg12 scaled 1095
+\let\fn@fontv\fivedm
+\let\fn@fontvi\fivedm
+\let\fn@fontvii\fivedm
+\let\fn@fontxv\tendghalf
+								% 1.06(3)
+\fi
+\fi
+
+\ifx\jfsize\undefined \newcount\jfsize \fi			% 1.06(2)
+
+\ifASCII						% 1.06(3),2.00(6)>>
+\let\setjglues\relax
+\let\jintercharskip\kanjiskip
+\let\jasciikanjiskip\xkanjiskip
+\let\jmathkanjiskip\xkanjiskip
+\newdimen\jspaceskip
+
+\def\defjintercharskip#1#2#3#4{\@asciiwarning{\defjintercharskip}}
+\def\defjasciikanjiskip#1#2#3#4{\@asciiwarning{\defjasciicharskip}}
+\def\defmathkanjiskip#1#2#3#4{\@asciiwarning{\defmathcharskip}}
+\def\defjspaceskip#1#2#3#4{\@asciiwarning{\defjspaceskip}}
+							
+\def\@asciiwarning#1{\ipsj@warning{\string#1\space		% 2.00(3)
+	is not supported in ASCII version}}
+							% 1.06(3),2.00(6)<<
+\else								% 2.00(7)>>
+\if@LaTeX@e
+\ipsj@declare@font\fn@eightdmhalf\dm\@ixpt
+\ipsj@declare@font\fn@eightdghalf\dg\@ixpt
+\else
+\def\fn@eightdmhalf{\eightdmhalf}
+\def\fn@eightdghalf{\eightdghalf}
+\fi
+\ifx\setjglues\undefined\else
+\expandafter\defjintercharskip\fn@eightdmhalf{0pt}{1.4pt}{0.5pt}
+\expandafter\defjintercharskip\fn@eightdghalf{0pt}{1.4pt}{0.5pt}
+\expandafter\defjasciikanjiskip\fn@eightdmhalf{2pt}{1pt}{1pt}
+\expandafter\defjasciikanjiskip\fn@eightdghalf{2pt}{1pt}{1pt}
+\expandafter\defjmathkanjiskip\fn@eightdmhalf{2pt}{1pt}{1pt}
+\expandafter\defjmathkanjiskip\fn@eightdghalf{2pt}{1pt}{1pt}
+\fi								% 2.00(7)<<
+\fi								% 2.00(4)
+
+\if@LaTeX@e							% 2.00(8)>>
+\if@LaTeX@eN
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}}
+\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}}
+\ifASCII
+\DeclareOldFontCommand{\mc}{\normalfont\mcfamily}{\mathmc}
+\DeclareOldFontCommand{\gt}{\normalfont\gtfamily}{\mathgt}
+\fi\fi
+\ifASCII
+\def\dm{\mc}
+\def\dg{\gt}
+\fi\fi								% 2.00(8)<<
+
+%%%%%% Basic Font Size Macros %%%%%%
+
+\if@LaTeX@e							% 1.06(4) >>
+\def\@setsize#1#2#3#4{\@setfontsize#1{#4}{#2}#3}
+\ifASCII
+\def\old@somept{\jspaceskip1zw\relax}
+\else
+\let\old@somept\relax
+\fi
+\let\vpt\old@somept						% 2.00(9)>>
+\let\vipt\old@somept
+\let\viipt\old@somept
+\let\viiipt\old@somept
+\let\ixpt\old@somept
+\let\xpt\old@somept
+\let\xipt\old@somept
+\let\xiipt\old@somept
+\let\xivpt\old@somept
+\let\xviipt\old@somept						% 2.00(9)<<
+								% 1.06(4) <<
+
+%% \vipt etc. are redefined to use appropriate Japanese fonts.
+\else								% 2.00(9)
+\def\vpt{\old@vpt\fivedm\let\pdg\fivedg\let\pdm\fivedm\jfsize=5\relax}
+\def\vipt{\old@vipt\sixdm\let\pdg\sixdg\let\pdm\sixdm\jfsize=6\relax}
+\def\viipt{\old@viipt\sevendm\let\pdg\sevendg\let\pdm\sevendm\jfsize=7\relax}
+\def\viiipt{\old@viiipt\eightdm\let\pdg\eightdg\let\pdm\eightdm\jfsize=8\relax}
+\def\ixpt{\old@ixpt\eightdmhalf\let\pdg\eightdghalf\let\pdm\eightdmhalf
+	\jfsize=9\relax \@ixptboldmath}				% 1.02(2)
+\def\xpt{\old@xpt\tendm\let\pdg\tendg\let\pdm\tendm\jfsize=10\relax}
+\def\xipt{\old@xipt\tendmhalf\let\pdg\tendghalf\let\pdm\tendmhalf\jfsize=11
+	\relax}
+\def\xiipt{\old@xiipt\twelvedm\let\pdg\twelvedg\let\pdm\twelvedm
+	\jfsize=12\relax}
+\def\xivpt{\old@xivpt\twelvedmhalf\let\pdg\twelvedghalf\let\pdm\twelvedmhalf
+	\jfsize=14\relax}
+\fi								% 2.00(9)
+
+\if@LaTeX@e							% 1.06(5)
+\let\@ixptboldmath\relax					% 1.06(5)
+\else								% 1.06(5)
+% 1.02(2) >>
+\ifDS@printer
+\def\@ixptboldmath{%
+	\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+		\textfont\@ne\ninmi 
+		\textfont\tw@\ninsy \textfont\lyfam\ninly
+		\@boldfalse}\@boldfalse
+	\def\boldmath{\@ifundefined{ninmib}{%
+		\global\font\ninmib\@mbi\@ptscale9\relax
+		\global\font\ninsyb\@mbsy\@ptscale9\relax
+		\global\font\ninlyb\@lasyb\@ptscale9\relax
+		\@addfontinfo\@ixpt
+			{\def\boldmath{\everymath{\mit}\everydisplay{\mit}%
+				\@prtct\@nomathbold
+				\textfont\@ne\ninmib \textfont\tw@\ninsyb 
+				\textfont\lyfam\ninlyb \@prtct\@boldtrue}}}{}%
+	\@ixpt\boldmath}}
+\else
+\def\@ixptboldmath{%
+	\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+		\textfont\@ne\ninmi 
+		\textfont\tw@\ninsy \textfont\lyfam\ninly
+		\@boldfalse}\@boldfalse
+% 1.03(1) >>
+	\def\boldmath{\@ifundefined{ninmib}{\global\font\ninmib\@mbi 
+		\global\font\ninsyb\@mbsy\relax
+		\global\font\ninlyb\@lasyb\relax
+		\@addfontinfo\@ixpt
+			{\def\boldmath{\everymath{\mit}\everydisplay{\mit}%
+				\@prtct\@nomathbold
+				\textfont\@ne\ninmib \textfont\tw@\ninsyb 
+				\textfont\lyfam\ninlyb \@prtct\@boldtrue}}}{}%
+	\@ixpt\boldmath}}
+% 1.03(1) <<
+\fi
+% 1.02(2) <<
+\fi								% 1.06(5)
+
+
+%%%%%% Font Size Macros %%%%%%
+
+\def\fs@setsize#1#2#3#4{\normalsize\dimen@\normalbaselineskip
+	\@ifstar{\@setsize{#1}{\dimen@}{#3}{#4}}%
+		{\@setsize{#1}{#2}{#3}{#4}}}
+
+% s = (3*b - (h' + d') - (h + d))/2
+% s_a = s + h' + d - b
+% s_b = s + h + d' - b
+\def\sec@setskips#1{\setbox0\hbox{\fs@sec\bf#1}\setbox1\hbox{#1}
+	\@tempdima3\baselineskip
+	\advance\@tempdima-\ht0 \advance\@tempdima-\dp0
+	\advance\@tempdima-\ht1 \advance\@tempdima-\dp1
+	\divide\@tempdima\tw@ \advance\@tempdima-\baselineskip
+	\@tempdimb\@tempdima
+	\advance\@tempdima\ht0 \advance\@tempdima\dp1
+	\advance\@tempdimb\ht1 \advance\@tempdimb\dp0
+	\edef\sec@aboveskip{\the\@tempdima}
+	\edef\sec@belowskip{\the\@tempdimb}}
+
+\ifDS@english
+% size		pt	\baselineskip	  size		\?pt	\baselineskip
+% \normalsize	10	16Q		  \large	11	18Q (*)
+% \small	 9	15Q		  \Large	12	22Q
+% \footnotesize	 8	13Q		  \LARGE	14	26Q (*)
+% \scriptsize	 6	8pt (*)		  \huge		18	30Q (*)
+% \tiny		 5	6pt (*)		  \Huge		18	30Q (*)
+% * : not measured
+
+\def\@normalsize{\@setsize\normalsize{16\@Q}\xpt\@xpt}
+\def\small{\fs@setsize\small{15\@Q}\ixpt\@ixpt}
+\def\footnotesize{\fs@setsize\footnotesize{13\@Q}\viiipt\@viiipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\Large{18\@Q}\xipt\@xipt}
+\def\Large{\@setsize\LARGE{22\@Q}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{26\@Q}\xivpt\@xivpt}
+\def\huge{\@setsize\Huge{30\@Q}\xviipt\@xviipt}
+\let\Huge\huge
+
+\ifDS@techrep							% 1.05(2)>>
+\def\@normalsize{\@setsize\normalsize{17\@Q}\xpt\@xpt}
+\fi								% 1.05(2)<<
+
+\if@LaTeX@e							% 2.00(10)>>
+\let\normalsize\@normalsize
+\fi								% 2.00(10)<<
+
+\let\fs@footnote\footnotesize
+\let\fs@caption\footnotesize
+\let\fs@table\footnotesize
+\let\fs@eabst\footnotesize
+\let\fs@header\footnotesize
+\let\fs@footer\footnotesize
+\let\fs@bibliography\small
+\let\fs@subsec\normalsize
+\let\fs@sec\normalsize
+\let\fs@type\large
+\let\fs@eauthor\large
+\let\fs@title\Large
+
+\@normalsize
+
+\sec@setskips{A}
+
+\else
+% size		pt	\baselineskip	  size		\?pt	\baselineskip
+% \normalsize	 9	19Q		  \large	10	19Q
+% \small	 8	14Q		  \Large	11	22Q
+% \footnotesize	 7	14Q		  \LARGE	12	18Q
+% \scriptsize	 6	8pt (*)		  \huge		14	26Q
+% \tiny		 5	6pt (*)		  \Huge		14	26Q
+% * : not measured
+
+\def\@normalsize{\@setsize\normalsize{19\@Q}\ixpt\@ixpt}
+\def\small{\fs@setsize\small{14\@Q}\viiipt\@viiipt}
+\def\footnotesize{\fs@setsize\footnotesize{14\@Q}\viipt\@viipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\vipt\@vipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{19\@Q}\xpt\@xpt}
+\def\Large{\@setsize\Large{22\@Q}\xipt\@xipt}
+\def\LARGE{\@setsize\LARGE{18\@Q}\xiipt\@xiipt}
+\def\huge{\@setsize\Huge{26\@Q}\xivpt\@xivpt}
+\let\Huge\huge
+
+\ifDS@techrep							% 1.05(2)>>
+\def\@normalsize{\@setsize\normalsize{17\@Q}\ixpt\@ixpt}
+\fi								% 1.05(2)<<
+
+\if@LaTeX@e							% 2.00(10)>>
+\let\normalsize\@normalsize
+\fi								% 2.00(10)<<
+
+\let\fs@footnote\footnotesize
+\let\fs@caption\footnotesize
+\let\fs@table\footnotesize
+\let\fs@abst\small
+\def\fs@eabst{\small\baselineskip13\@Q}
+\let\fs@header\small
+\let\fs@footer\small
+\let\fs@subsec\normalsize
+\def\fs@bibliography{\normalsize\baselineskip16\@Q}
+\let\fs@sec\large
+\let\fs@type\fn@fontxv
+\let\fs@author\Large
+\def\fs@eauthor{\Large\baselineskip15\@Q}
+\let\fs@etitle\LARGE
+\let\fs@title\huge
+
+\@normalsize 
+								% 2.00(7)
+\ifx\setjglues\undefined\else
+\setjglues
+\fi
+
+\sec@setskips{$B$"(B}
+
+\fi
+
+\if@LaTeX@e\else						% 2.00(11)
+\let\latex@bf\bf						% 1.06(6)
+\def\bf{\latex@bf \dg}						% 1.06(6)
+\fi								% 2.00(11)
+
+
+%%%%%% Page Layout Parameters %%%%%%
+
+\newdimen\@mojihaba
+
+\headheight 12\@Q
+
+% We want to allow a line containing $\displaystyle X^X$ to be a first line.
+\setbox0\hbox{$\displaystyle X^X$}
+\topskip\ht0
+
+\ifdim\maxdepth<\dp\strutbox \maxdepth\dp\strutbox \@maxdepth\maxdepth\fi
+
+\@tempswafalse							% 1.05(2)>>
+\ifDS@english \ifDS@techrep \else \@tempswatrue \fi\fi
+\if@tempswa							% 1.05(2)<<
+\topmargin 138\@Q \advance\topmargin-1in
+
+% \textheight = 53\baselineskip + \topskip + epsilon(100sp)
+\textheight53\baselineskip \advance\textheight\topskip \advance\textheight100sp
+
+% \headsep = 24Q - \topskip
+\headsep24\@Q \advance\headsep-\topskip
+
+% Only first page has page number (footer) at the bottom
+\footskip 27\@Q
+
+\@mojihaba13\@Q
+
+\else
+\topmargin 131\@Q \advance\topmargin-1in
+
+% \textheight = 45\baselineskip + \topskip + epsilon(100sp)
+\textheight45\baselineskip \advance\textheight\topskip \advance\textheight100sp
+
+\ifDS@techrep							% 1.05(2)>>
+\textheight50\baselineskip \advance\textheight\topskip \advance\textheight100sp
+\fi								% 1.05(2)<<
+
+% \headsep = 28Q - \topskip
+\headsep28\@Q \advance\headsep-\topskip
+
+% Only first page has page number (footer) at the bottom
+\footskip24\@Q
+
+\@mojihaba12\@Q
+\fi
+
+\columnsep30\@Q
+
+% \textwidth - \columnwidth = 24 * 12Q * 2 + \columnsep = 606Q
+\textwidth606\@Q
+\columnseprule0pt
+
+\oddsidemargin210mm \advance\oddsidemargin-\textwidth \divide\oddsidemargin\tw@
+\advance\oddsidemargin-1in \evensidemargin\oddsidemargin
+
+\skip\footins\baselineskip \advance\skip\footins-.5\@mojihaba
+% \footnotesep = \baselineskip - depth(\strutbox)
+{\fs@footnote
+	\footnotesep\baselineskip
+	\global\advance\footnotesep-\dp\strutbox}
+
+\def\footnoterule{{\fs@footnote\kern-\dp\strutbox \hrule \kern-.4\p@
+	\kern\dp\strutbox}}
+
+\floatsep \baselineskip \textfloatsep \baselineskip 
+\intextsep \baselineskip \@maxsep \baselineskip
+\dblfloatsep \baselineskip \dbltextfloatsep \baselineskip
+\@dblmaxsep \baselineskip
+\@fptop 0pt plus 1fil \@fpsep 0pt plus 2fil \@fpbot 0pt plus 1fil 
+\@dblfptop 0pt plus 1fil \@dblfpsep 0pt plus 2fil \@dblfpbot 0pt plus 1fil
+
+\parskip\z@ \parindent\@mojihaba
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301 
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty 
+
+
+%%%%%% Title and Authors %%%%%%
+%
+% Format of title, author names and abstract.
+%
+%	\huge\bf <Japanese title>
+%	\vskip 32Q
+%	\Large <Japanese author names>
+%	\vskip 32Q
+%	\small <Japanese abstract>
+%	\vskip 34Q
+%	\LARGE\bf <English title>
+%	\vskip 28Q
+%	\Large\sc <English author names>
+%	\vskip 28Q
+%	\small <English abstract>
+%	\vskip 25Q
+
+\def\maketitle{\par\twocolumn[\@maketitle]\thispagestyle{myheadings}\@thanks}
+
+% default title header
+
+\def\title{\@dblarg{\@xtitle}}
+\def\@xtitle[#1]#2{\gdef\@title{#2}%
+	{\def\protect{\noexpand\protect\noexpand}%
+		\ifDS@english\def\\{\unskip\ \ignorespaces}%
+		\else\def\\{\unskip\ignorespaces}\fi
+		\xdef\@titlestring{#1}}%
+	\settowidth\@tempdima{\fs@header
+		\hskip12\@Q Vol.~00\hskip12\@Q No.~00\qquad\@titlestring\qquad
+		Vol.~00\hskip12\@Q No.~00\hskip12\@Q}
+	\ifdim\@tempdima>\textwidth
+		\ipsj@warning{\string\title\space for headding is too wide}\fi}
+								% 2.00(3)
+\def\@title{\mkt@warning\title}\def\@titlestring{}
+\long\def\author#1{\long\gdef\@author{#1}}
+\def\@author{\mkt@warning\author}
+
+\newbox\@abstractbox
+%% Introduce \@titlewidth because we now use this dimen repeatedly. (H.N.)
+%% \@titlewidth = 44 * 11Q = 484Q
+\newdimen\@titlewidth \@titlewidth 484\@Q
+
+\def\abstract{\global\let\@abstract\relax
+	\global\setbox\@abstractbox\hbox\bgroup
+		\begin{minipage}[b]{\@titlewidth}\fs@abst\parindent11\@Q}
+\def\endabstract{\end{minipage}\egroup}
+\def\@abstract{\mkt@warning{abstract env}}
+
+%% We need English title, author name(s) and abstract. (H.N.)
+\def\etitle#1{\gdef\@etitle{#1}}
+\def\@etitle{\mkt@warning\etitle}
+\long\def\eauthor#1{\long\gdef\@eauthor{#1}}
+\def\@eauthor{\mkt@warning\eauthor}
+
+\newbox\@eabstractbox
+\def\eabstract{\global\let\@eabstract\relax
+	\global\setbox\@eabstractbox\hbox\bgroup
+		\begin{minipage}[b]{\@titlewidth}\fs@eabst\parindent11\@Q}
+\let\endeabstract\endabstract
+\def\@eabstract{\mkt@warning{eabstract env}}
+
+\ifDS@english
+\let\author\eauthor \let\abstract\eabstract
+\let\@eauthor\@author \let\@eabstract\@abstract
+\fi
+
+\def\mkt@warning#1{\ipsj@warning{Missing \string#1}}		% 2.00(3)
+
+\newdimen\mkt@prevdepth
+\newbox\mkt@titlebox
+\def\@maketitle{\setbox\mkt@titlebox\vbox{
+	\ifDS@english \ifDS@preface
+		\hbox{}\vskip60\@Q \vskip-\headsep \vskip-\baselineskip
+	\else
+		\hbox{}\vskip26\@Q \vskip-\headsep \vskip-\baselineskip
+		\leftline{\fs@type\it
+			\ifDS@technote Technical Note
+			\else	       Regular Paper\fi}
+		\vskip32\@Q \vskip-\baselineskip \fi
+	\else\ifDS@technote
+		\vskip18\@Q \vskip-\headsep
+		\leftline{\vbox to28\@Q{\hrule height.8pt\vss
+			\hbox{\hskip7\@Q \fs@type $B%F%/%K%+%k%N!<%H(B%
+				\hskip7\@Q}\vss\hrule height.8pt}}
+		\vskip40\@Q \vskip-\baselineskip
+	\else
+		\hbox{}\vskip60\@Q \vskip-\headsep \vskip-\baselineskip
+	\fi\fi
+	\@tempswafalse \ifDS@english\else\ifDS@preface\@tempswatrue\fi\fi
+	\mkt@maketitle{\fs@title\bf}\@title\title
+% 1.04(1a) >>
+	\ifnum\c@affi@footnote>\thr@@
+		\let\theaffi@footnote\theaffi@footnotemany \fi
+	\c@affi@footnote\z@
+% 1.04(1a) <<
+	\affi@labels
+	\ifDS@english\else
+	\vskip-\mkt@prevdepth \nointerlineskip\vskip32\@Q
+	\centerline{\vbox{\centering\hsize\@titlewidth\fs@author
+		\mkt@makeauthor}}
+	\ifDS@preface\else
+	\vskip-\prevdepth \nointerlineskip\vskip32\@Q
+	\centerline{\@abstract\box\@abstractbox}
+	\vskip-\prevdepth \nointerlineskip\vskip34\@Q
+	\mkt@maketitle{\fs@etitle\bf}\@etitle\etitle
+	\fi\fi
+	\if@tempswa\else
+	\vskip-\mkt@prevdepth \nointerlineskip\vskip28\@Q
+	\centerline{\vbox{\centering\hsize\@titlewidth\fs@eauthor\sc
+		\mkt@makeeauthor}}
+	\fi
+	\ifDS@preface\else
+	\vskip-\prevdepth \nointerlineskip\vskip28\@Q
+	\centerline{\@eabstract\box\@eabstractbox}
+	\fi
+	\vskip-\prevdepth \nointerlineskip\vskip25\@Q}
+	\@tempdimb\ht\mkt@titlebox \advance\@tempdimb\dp\mkt@titlebox
+	\@tempcnta\@tempdimb \@tempcntb\baselineskip
+	\divide\@tempcnta\@tempcntb \@tempdima\@tempcnta\baselineskip
+	\advance\@tempdima-\@tempdimb
+	\box\mkt@titlebox
+	\ifdim\@tempdima=\z@\else\advance\@tempdima\baselineskip
+		\vskip\@tempdima\fi}
+
+%% \mkt@maketitle puts Japanese/English title, whose lines should be
+%% properly broken with \\ by the user.  The result is flushed to left, then
+%% centered with respect to the longest line. (H.N.)
+\def\mkt@maketitle#1#2#3{\setbox\@tempboxa\vtop{
+	\def\\{\unskip\egroup\hbox\bgroup\ignorespaces}
+		#1\hbox\bgroup#2\unskip\egroup
+		\global\mkt@prevdepth\prevdepth}
+	\@tempdima\textwidth\advance\@tempdima-4\@mojihaba
+	\ifdim\wd\@tempboxa>\@tempdima
+		\ipsj@warning{%					% 2.00(3)
+			\string#3 is too wide. Break line(s) by \string\\}\fi
+	\centerline{\box\@tempboxa}}
+
+% Assignment of Japanese author names to lines:
+% 1 -> 1, 2 -> 2, 3 -> 3, 4 -> 2+2, 5 -> 3+2, 6 -> 3+3, 7 -> 3+2+2, 8 -> 3+3+2,
+% ...
+% Rule for N authors (N > 2, q := N div 3)
+%	N mod 3 = 0 -> 3 * q
+%	N mod 3 = 1 -> 3 * (q - 2) + 2 + 2
+%	N mod 3 = 2 -> 3 * (q - 1) + 2
+
+\newcount\mkt@cnta\newcount\mkt@cntb
+\newcount\mkt@sname\newcount\mkt@gname
+\newbox\mkt@boxa
+\newdimen\mkt@namewidth
+\def\mkt@makeauthor{\let\member\@gobble \let\nomember\relax
+	\let\stmember\@gobble	% Those are not necessary in final manuscript.
+	\def\@makefnmark{\smash{\rlap{\fn@fontvii$^{\affi@thefnmark}$}}}%
+	\gdef\affi@thefnmark{}\leavevmode\let\+\ignorespaces
+	\settowidth\@tempdima{$B$"(B}\mkt@namewidth7\@tempdima\@tempcnta\z@
+	\expandafter\mkt@countauthor\@author\and\@nil\and
+	\ifnum\@tempcnta=\@ne\let\mkt@anhbox\mkt@anhboxc\mkt@makesingleauthor
+	\else
+		\@tempcntb\@tempcnta \divide\@tempcntb\thr@@
+		\multiply\@tempcntb\thr@@ \advance\@tempcntb-\@tempcnta
+		\ifnum\@tempcntb=\m@ne\relax\@tempcntb\tw@\else\@tempcntb\z@\fi
+		\mkt@cnta\thr@@
+		\let\mkt@anhbox\mkt@anhboxl
+		\expandafter\mkt@makemultiauthor\@author\and\and\fi}
+\def\mkt@countauthor#1\and{\def\@tempa{#1}\ifx\@tempa\@nnil\let\next\relax
+	\else\advance\@tempcnta\@ne \let\next\mkt@countauthor\fi\next}
+
+% If single author, author name has 9 KC width instead of 7.
+\def\mkt@makesingleauthor{\divide\mkt@namewidth7\multiply\mkt@namewidth9\relax
+	\expandafter\mkt@putauthor\@author\+ \@nil}
+
+\def\mkt@makemultiauthor#1\and{\ifnum\@tempcnta=\z@\unskip\let\next\relax\else
+	\leavevmode
+	\advance\mkt@cnta\m@ne \advance\@tempcnta\m@ne
+	\ifnum\mkt@cnta=\z@\mkt@maleft{#1}\mkt@cnta\thr@@\else
+	\ifnum\@tempcnta=\@tempcntb\mkt@maleft{#1}\mkt@cnta\tw@\else
+	\mkt@putauthor#1\+ \@nil\let\mkt@anhbox\mkt@anhboxc\fi\fi
+	\let\next\mkt@makemultiauthor\fi\next}
+\def\mkt@maleft#1{\let\mkt@anhbox\mkt@anhboxr\mkt@putauthor#1\+ \@nil
+	\par\let\mkt@anhbox\mkt@anhboxl}
+
+% Japanese author name format:
+%	Non Japanese : As is.
+%	Japanese w/o s/g delimitor : As is with warning.
+%	Japanese (s+g>6) : As is.
+%	Japanese (s+g<7) : Give 1-KC space to s/g delimitor, then insert
+%		infinit stretch between each character pair, assuming the
+%		s/g delimitor as a charcter, to make the name have 7-KC
+%		width.   An exception is 2s + 2g case, in which s/g
+%		delimitor has 0 width in order to have the result
+%		"S_S_G_G".
+
+\def\mkt@putauthor#1 #2\@nil{%
+	\setbox\@tempboxa\hbox{\let\affiref\@gobble \let\mkt@warning\@gobble
+		\jintercharskip\z@#1#2}%
+	\setbox\mkt@boxa\hbox{\let\affiref\@gobble \let\mkt@warning\@gobble
+		\jintercharskip1cm#1#2}%
+	\ifdim\wd\@tempboxa=\wd\mkt@boxa \mkt@anhbox{#1 #2}\else
+						% probably no Kanjis
+	\def\@tempa{#2}\ifx\@tempa\empty	% without space btwn s/g-name
+		{\let\affiref\@gobble \def\+{}%
+			\ipsj@warning{Author name #1 doesn't have a space}}%
+								% 2.00(3)
+		\mkt@anhbox{#1}\else
+	\mkt@getnamewidth\mkt@sname{#1}\mkt@getnamewidth\mkt@gname{#2}%
+	\mkt@cntb\mkt@sname \advance\mkt@cntb\mkt@gname
+	\ifnum\mkt@cntb>6\relax\mkt@anhbox{#1\ #2}\else
+	\jintercharskip\fill%
+	\@tempskipa\@tempdima plus2fill\relax
+	\ifnum\mkt@sname=\tw@ \ifnum\mkt@gname=\tw@ \@tempskipa\fill\fi\fi
+	\hbox to\mkt@namewidth{#1\hskip\@tempskipa#2\@makefnmark}\fi\fi\fi
+	\gdef\affi@thefnmark{}\hskip\columnsep}
+
+% When an author name is formatted "as is", the following macros are used
+% according to their position (left, right, or center).
+\def\mkt@anhboxl#1{\hbox to\mkt@namewidth{\hss#1\@makefnmark}}
+\def\mkt@anhboxr#1{\hbox to\mkt@namewidth{#1\@makefnmark\hss}}
+\def\mkt@anhboxc#1{\setbox\@tempboxa\hbox{#1\@makefnmark}%
+	\ifdim\wd\@tempboxa>\mkt@namewidth\box\@tempboxa
+	\else\hbox to\mkt@namewidth{\box\@tempboxa\hss}\fi}
+
+\def\mkt@getnamewidth#1#2{\setbox\@tempboxa\hbox{\let\affiref\@gobble#2}%
+	\@tempdimb\wd\@tempboxa
+	\advance\@tempdimb.5\@tempdima #1\@tempdimb \mkt@cntb\@tempdima
+	\divide#1\mkt@cntb}
+
+% English author name format
+%	1 -> <name-1>^*
+%	2 -> <name-1>^* and~<name-2>^*
+%	3 or more -> <name-1>,^* <name-2>,^* ... <name-n-1>^* and~<name-n>^*
+% (be careful the position of comma).
+%
+% No special tricks for assignment names to line.  Names are simply put in a
+% \centering paragraph.
+
+\def\mkt@makeeauthor{\let\member\@gobble \let\nomember\relax
+	\let\stmember\@gobble	% Those are not necessary in final manuscript.
+	\leavevmode\let\mkt@and\relax\gdef\affi@thefnmark{}%
+	\def\@thefnmark{\affi@thefnmark}%
+	\expandafter\mkt@imakeeauthor\@eauthor\and\@nil\and}
+\def\mkt@imakeeauthor#1\and#2\and{\def\@tempa{#2}\ifx\@tempa\@nnil
+		#1\@makefnmark\let\next\relax
+	\else
+		\def\@tempb{#1}\def\next{\mkt@iimakeeauthor#2\and}%
+	\fi\next}
+\def\mkt@iimakeeauthor#1\and{\def\@tempa{#1}\ifx\@tempa\@nnil
+		\@makefnmark\ {\rm{and}~}\gdef\affi@thefnmark{}\hbox{\@tempb}%
+		\@makefnmark\let\next\relax
+	\else
+		\mkt@and\hbox{\@tempb}\let\mkt@and\mkt@andmid
+		\let\next\mkt@iimakeeauthor
+	\fi\def\@tempb{#1}\next}
+\def\mkt@andmid{,\@makefnmark\ \gdef\affi@thefnmark{}}
+
+% Macros to specify author's affiliation easily.
+\newcounter{affi@footnote} \c@affi@footnote\z@
+\def\affilabel{\stepcounter{affi@footnote}\affi@deflabels\affi@affilabel}
+								% 1.04(1a)
+\def\paffilabel{\affi@deflabels\affi@paffilabel}
+\def\affi@deflabels#1#2#3{{\def\protect{\noexpand\protect\noexpand}%
+	\let\affi@affilabel\relax \let\affi@paffilabel\relax \let\\\relax
+	\xdef\affi@labels{\affi@labels#1{#2}{#3}}}}
+\def\affi@labels{}
+\def\affi@affilabel{\begingroup
+	\def\@mpfn{affi@footnote}\def\thempfn{\theaffi@footnote}%
+	\def\affi@fnmark{\protect\@makefnmarkdagger}%
+	\affi@label}
+\def\affi@paffilabel#1#2{\begingroup\PF@adjustfnote
+	\def\affi@fnmark{\protect\@makefnmarkstar}%
+	\def\protect{\noexpand\protect\noexpand}%
+	\def\\{\noexpand\\Presently with \ignorespaces}%
+	\edef\@tempa{\ifDS@english Presently with \else $B8=:_!$(B\fi#2}% 1.04(1d)
+	\affi@label{#1}{\@tempa}}
+\def\affi@label#1#2{\stepcounter{\@mpfn}%
+	\@ifundefined{affi@r@#1}%
+		{\expandafter\xdef\csname affi@r@#1\endcsname{\thempfn}}
+		{\ipsj@warning{Affiliation label `#1' multiply defined}}%
+								% 2.00(3)
+	\let\affi@footnotetext\relax\let\\\relax
+	\def\protect{\noexpand\protect\noexpand}%
+	\xdef\@thanks{\@thanks
+		\affi@footnotetext{\thempfn}{\affi@fnmark}{#2}}\endgroup}
+
+\def\affiref#1{\@ifundefined{affi@r@#1}%
+		{\ipsj@warning{Affiliation reference `#1' undefined}% 2.00(3)
+			\def\@tempa{?}}%
+		{\def\@tempa{\csname affi@r@#1\endcsname}}%
+	\ifx\affi@thefnmark\empty\xdef\affi@thefnmark{\@tempa}\else
+	\xdef\affi@thefnmark{\affi@thefnmark,\hskip\z@\@tempa}\fi}
+\def\affi@footnotetext#1#2#3{{\def\@thefnmark{#1}\def\@makefnmarkforfn{#2}
+	\@footnotetext{#3}}}
+
+% 1.04(1b)>>
+\def\theaffi@footnote{\ifcase\c@affi@footnote\or
+	{\dagger}\or {\dagger}{\dagger}\or {\dagger}{\dagger}{\dagger}\fi}
+								% 1.04(1c)
+\def\theaffi@footnotemany{{\dagger}\number\c@affi@footnote}
+% 1.04(1b)<<
+
+\def\thanks#1{\begingroup
+	\def\@makefnmark{\smash{\hbox{\fn@fontvii$^{\@thefnmark}$}}}%
+	\footnotemark
+	\let\affi@footnotetext\relax\let\\\relax
+	\def\protect{\noexpand\protect\noexpand}%
+	\xdef\@thanks{\@thanks
+		\affi@footnotetext{\thempfn}{\protect\@makefnmarkstar}{#1}}%
+	\endgroup}
+
+% \contact is necessary only for drafts.
+\long\def\contact#1{}
+
+
+%%%%%% Page Header and Footer %%%%%% 
+%%%XXX
+
+\mark{{}{}} 
+
+\newcounter{volpageoffset} % You must set this to appropriate value
+\setcounter{volpageoffset}{1} % for each issue!
+
+% 2.00(16)>>
+\let\latex@document\document
+\def\document{\latex@document\global\c@page\c@volpageoffset}
+\let\c@volpage\c@page		% for backward compatibility
+\def\thevolpage{\thepage}	% for backward compatibility
+% 2.00(16)<<
+
+\newcounter{volume}\expandafter\let\csname c@$B4,?t(B\endcsname\c@volume
+\newcounter{number}\expandafter\let\csname c@$B9f?t(B\endcsname\c@number
+\newcounter{year}\expandafter\let\csname c@$BG/?t(B\endcsname\c@year
+
+%\def\@thevolno{Vol.~\arabic{$B4,?t(B}\hskip\@mojihaba No.~\arabic{$B9f?t(B}}
+\def\@thevolno{\hskip\@mojihaba}
+% 2.00(15)>>
+\def\@monthyear{\hskip\@mojihaba}
+%\def\@monthyear{\ifcase\value{$B9f?t(B}\or Jan.\or Feb.\or Mar.\or Apr.\or May\or
+%		June\or July\or Aug.\or Sep.\or Oct.\or Nov.\or Dec.\else\fi
+%	\hskip.5\@mojihaba \setcounter{$BG/?t(B}{1959}%
+%	\addtocounter{$BG/?t(B}{\value{$B4,?t(B}}\arabic{$BG/?t(B}}
+% 2.00(15)<<
+
+% 1.05(2)>>
+\ifDS@techrep
+\def\ps@headings{\let\@mkboth\markboth
+	\def\@oddhead{\@checklines\hss}\let\@evenhead\@oddhead
+	\def\@oddfoot{}\def\@evenfoot{}}
+\let\ps@myheadings\ps@headings
+
+\else
+% 1.05(2)<<
+\def\ps@headings{\let\@mkboth\markboth
+	\def\@oddfoot{}
+	\def\@evenfoot{}
+	\def\@evenhead{%\fs@header \@checklines
+		%\hskip\@mojihaba\rlap{\thepage}\hss
+		%\hdr@tipsj\hss\llap{\@monthyear}\hskip\@mojihaba
+	}
+	\def\@oddhead{%\fs@header \@checklines
+		%\hskip\@mojihaba\rlap{\@thevolno}\hss
+		%\smash{\@titlestring}\hss
+		%\llap{\thepage}\hskip\@mojihaba
+	}
+	\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+	\def\@oddhead{%\fs@header \@checklines
+		%\hskip\@mojihaba\rlap{\@thevolno}\hss
+		%\hdr@tipsj\hss
+		%\llap{\@monthyear}\hskip\@mojihaba
+	}
+	\def\@oddfoot{%\fs@footer\hfil\thepage\hfil
+	}
+	\let\@evenhead\@oddhead
+	\let\@evenfoot\@oddfoot
+	\def\sectionmark##1{}\def\subsectionmark##1{}}
+\fi								% 1.05(2)
+
+\ifDS@english
+\def\hdr@tipsj{%Transactions of Information Processing Society of Japan
+}%
+\else
+%\def\hdr@tipsj{$B>pJs=hM}3X2qO@J8;o(B}
+\def\hdr@tipsj{%$BAH9~$_%=%U%H%&%(%"%7%s%]%8%&%`(BESS04
+}%
+\fi
+
+% \checklines enables to draw a horizontal rule onto each baselines.
+
+\newif\if@checklines \@checklinesfalse
+\def\checklines{\@checklinestrue}
+\def\@checklines{\if@checklines \rlap{\smash{\vtop{\normalsize
+	\hbox{} \vskip\headsep \hrule width\textwidth\vskip-.4pt \vskip\topskip
+	\hrule\vskip-.4pt
+	\ifDS@techrep\@tempcnta50\else				% 1.05(2)
+	\ifDS@english\@tempcnta53\else\@tempcnta45\fi\fi	% 1.05(2)
+	\relax\@@checklines}}}\fi
+	\ifDS@english\@tempcnta-7\else\@tempcnta\z@\fi\relax
+% 1.05(2)>>
+	\@tempswafalse
+	\ifDS@printer \@tempswatrue \fi \ifDS@techrep \@tempswatrue \fi
+	\if@tempswa \unitlength\@Q \begin{picture}(0,0)(0,\@tempcnta)
+		\put(-61,63){\begin{picture}(0,0)
+			\put(-10,0){\line(-1,0){30}}
+			\put(0,10){\line(0,1){30}}\end{picture}}
+		\put(667,63){\begin{picture}(0,0)
+			\put(10,0){\line(1,0){30}}
+			\put(0,10){\line(0,1){30}}\end{picture}}
+		\put(-61,-965){\begin{picture}(0,0)
+			\put(-10,0){\line(-1,0){30}}
+			\put(0,-10){\line(0,-1){30}}
+			\ifDS@techrep
+			\put(0,-10){\makebox(728,0)[t]{\thepage}}\fi
+			\end{picture}}
+% 1.05(2)<<
+		\put(667,-965){\begin{picture}(0,0)
+			\put(10,0){\line(1,0){30}}
+			\put(0,-10){\line(0,-1){30}}\end{picture}}
+		\end{picture}\fi}
+\def\@@checklines{\ifnum\@tempcnta>\z@
+	\vskip\normalbaselineskip \hrule\vskip-.4pt \advance\@tempcnta\m@ne
+	\let\next\@@checklines\else\let\next\relax\fi\next}
+
+\pagestyle{headings}
+\pagenumbering{arabic}
+
+\ifDS@english\else
+\def\today{\the\year $BG/(B \the\month $B7n(B \the\day $BF|(B}
+\fi
+
+
+%%%%%% Output Routine %%%%%%
+
+% To balance the final page,
+% following code is borrowed from nicetwocolumn style
+
+% you can refrain from balancing by falsifying following switch!
+%% Initial value of \if@lastpagebalancing is false.  It may be turned true by
+%% biography processing macros. (H.N.)
+
+\newif\if@lastpagebalancing \@lastpagebalancingfalse
+\newif\if@finalpageoutput \@finalpageoutputfalse
+% incorporate balanced output to \enddocument
+\let\latex@enddocument\enddocument
+\def\enddocument{\@finalpageoutputtrue
+	\if@lastpagebalancing
+		\global\let\@outputdblcol\opt@balanceoutputdblcol\fi
+	\ifDS@preface
+		\global\let\@outputdblcol\opt@balanceoutputdblcol\fi
+	\latex@enddocument}
+
+\newbox\@leftcolumnfootnote \newbox\@rightcolumnfootnote
+\newif\if@leftfootnoteexist \@leftfootnoteexistfalse 
+\newif\if@rightfootnoteexist \@rightfootnoteexistfalse
+\newif\ifopt@floatexist \opt@floatexistfalse
+
+% 2.00(12) \color@{begin/end}group ignored
+\def\enlargethispage{\ipsj@warning{\string\enlargepage is ignored}}
+								% 2.00(3,12)
+\def\@makecol{\vbadness10000 \lineskiplimit\normallineskiplimit	% 1.05(1)
+	\setbox\@outputbox\box\@cclv
+	\if@firstcolumn
+		\ifvoid\footins \global\@leftfootnoteexistfalse
+		\else
+			\global\@leftfootnoteexisttrue
+			\@tempdima\dp\footins
+			\global\setbox\@leftcolumnfootnote\vbox{
+				\unvbox\footins\vskip-\@tempdima}
+		\fi
+		\ifx\@botlist\@empty\else\global\opt@floatexisttrue\fi
+	\else
+		\ifvoid\footins \global\@rightfootnoteexistfalse
+		\else
+			\global\@rightfootnoteexisttrue
+			\@tempdima\dp\footins
+			\global\setbox\@rightcolumnfootnote\vbox{
+				\unvbox\footins	\vskip-\@tempdima}
+		\ifx\@toplist\@empty\else\global\opt@floatexisttrue\fi
+		\fi
+	\fi
+	\xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+	\global\maxdepth\@maxdepth}
+
+% 2.01(1) >>
+\let\latex@vtryfc\@vtryfc
+\def\@vtryfc{\if@firstcolumn \global\@leftfootnoteexistfalse
+	\else \global\@rightfootnoteexistfalse \fi \latex@vtryfc}
+% 2.01(1) <<
+
+% 1.01(1,2) >>
+\let\latex@addtobot\@addtobot
+\def\@addtobot{\latex@addtobot\global\maxdepth\@maxdepth}
+\let\latex@combinefloats\@combinefloats
+\def\@combinefloats{\ifx\@botlist\@empty\else \dimen@\dp\@outputbox
+	\setbox\@outputbox\vbox{\unvbox\@outputbox \vskip-\dimen@}\fi
+	\latex@combinefloats}
+% 1.01(1,2) <<
+
+\newskip\opt@baselineskip
+\def\@outputdblcol{
+	\if@firstcolumn \global\@firstcolumnfalse
+		\global\setbox\@leftcolumn\box\@outputbox
+		\global\opt@baselineskip\baselineskip
+	\else \global\@firstcolumntrue \global\opt@floatexistfalse
+	\global\bib@adjustheight-\maxdimen
+	\setbox\@leftcolumn\vbox to\@colht{\boxmaxdepth\@maxdepth   % 1.01(3)
+		\unvbox\@leftcolumn
+		\if@leftfootnoteexist\vfil
+\message{<L>}
+			\footnoterule\box\@leftcolumnfootnote\fi}
+	\setbox\@outputbox\vbox to\@colht{\boxmaxdepth\@maxdepth    % 1.01(3)
+		\unvbox\@outputbox
+		\if@rightfootnoteexist\vfil
+\message{<R>}
+			\footnoterule\box\@rightcolumnfootnote\fi}
+	\global\maxdepth\@maxdepth
+	\if@finalpageoutput
+	\if@leftfootnoteexist\else\if@rightfootnoteexist\else
+		\setbox\@leftcolumn\vbox{\unvbox\@leftcolumn}%
+		\setbox\@outputbox\vbox{\unvbox\@outputbox}
+		\ifdim\ht\@leftcolumn<\ht\@outputbox
+			\setbox\@leftcolumn\vbox to\ht\@outputbox{
+				\unvbox\@leftcolumn}%
+		\else
+			\setbox\@outputbox\vbox to\ht\@leftcolumn{
+				\unvbox\@outputbox}%
+		\fi
+	\fi\fi\fi
+	\setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth
+		{\box\@leftcolumn \hss}\hfil \vrule width\columnseprule\hfil
+		\hbox to\columnwidth{\box\@outputbox \hss}}}
+	\@combinedblfloats
+	\@outputpage \begingroup \@dblfloatplacement \@startdblcolumn
+	\@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}%
+	\endgroup
+	\fi}
+
+\let\opt@outputdblcol\@outputdblcol
+\chardef\opt@boxa\z@
+\chardef\opt@boxb\@ne
+\chardef\opt@boxc\tw@
+\def\opt@magicpenalty{1234}
+\def\opt@balanceoutputdblcol{\let\next\opt@ibalanceoutputdblcol
+	\if@firstcolumn \let\next\opt@outputdblcol
+	\else	\ifopt@floatexist \opt@warning \let\next\opt@outputdblcol
+		\else\ifx\@deferlist\@empty\else
+			\opt@warning \let\next\opt@outputdblcol\fi\fi\fi
+	\next}
+\def\opt@ibalanceoutputdblcol{%
+	\setbox\@leftcolumn\vbox{\unvbox\@leftcolumn
+		\ifnum\lastpenalty=\opt@magicpenalty\relax\else
+		\@tempcnta10\relax\@whilenum\@tempcnta>0\do{%
+			\unskip\unskip\unkern\unpenalty
+			\advance\@tempcnta\m@ne}\fi}
+	\advance\opt@baselineskip-\dp\@leftcolumn
+	\ifdim\dp\@leftcolumn=\z@ \ifdim\opt@baselineskip=\baselineskip
+		\@tempdima\ht\@leftcolumn \advance\@tempdima-\topskip
+		\divide\@tempdima\baselineskip
+		\@tempcnta\@tempdima \@tempdima\@tempcnta\baselineskip
+		\advance\@tempdima\topskip
+		\advance\@tempdima-\ht\@leftcolumn
+		\advance\opt@baselineskip\@tempdima \fi\fi
+	\advance\opt@baselineskip-\topskip
+	\setbox\@outputbox\vbox{\unvbox\@outputbox}
+	\ifdim\ht\@outputbox=\topskip \ifdim\dp\@outputbox=\z@
+	\setbox\opt@boxa\vbox{\unvcopy\@outputbox\unskip
+		\global\setbox\opt@boxb\lastbox
+		\global\dimen@\lastskip}
+	\ifvoid\opt@boxb\else\ifdim\ht\opt@boxb=\z@
+		\ifdim\dp\opt@boxb=\z@\ifdim\dimen@=\topskip
+		\@firstcolumntrue\fi\fi\fi\fi\fi\fi
+	\setbox\opt@boxa\copy\@outputbox
+	\setbox\@outputbox\vbox{\unvcopy\@leftcolumn
+		\if@firstcolumn\else
+		\vskip\opt@baselineskip
+		\penalty\interlinepenalty\unvbox\@outputbox\fi}
+	\@tempdima\ht\@outputbox \advance\@tempdima\topskip
+	\divide\@tempdima\tw@ \advance\@tempdima100sp
+	\splittopskip\topskip \splitmaxdepth\@maxdepth
+	\ifdim\bib@adjustheight<\@M pt
+		\opt@split\@outputbox\opt@boxb\@tempdima
+		\ifdim\ht\opt@boxb<\bib@adjustheight
+			\opt@split\@leftcolumn\opt@boxc\bib@adjustheight
+			\opt@split\opt@boxc\opt@boxb\@tempdima
+			\if@firstcolumn
+				\opt@adjust\opt@boxc{\unvbox\@leftcolumn}
+			\else\opt@adjust\opt@boxc{\ifvoid\@leftcolumn\else
+				\unvbox\@leftcolumn\vskip\opt@baselineskip\fi
+				\unvbox\opt@boxa}\fi\fi
+	\else
+		\advance\bib@adjustheight-\@M pt
+		\opt@split\opt@boxa\opt@boxc\bib@adjustheight
+		\setbox\@outputbox\vbox{\unvbox\@leftcolumn
+			\vskip\opt@baselineskip\unvbox\opt@boxc}
+		\opt@split\@outputbox\opt@boxb\@tempdima
+		\opt@adjust\@outputbox{\unvbox\opt@boxa}
+	\fi
+	\if@leftfootnoteexist
+		\setbox\opt@boxb\vbox to\@colht{\box\opt@boxb\vfill
+			\footnoterule\box\@leftcolumnfootnote}\fi
+	\if@rightfootnoteexist
+		\setbox\@outputbox\vbox to\@colht{\box\@outputbox\vfill
+			\footnoterule\box\@rightcolumnfootnote}\fi
+	\ifdim\ht\@outputbox>\ht\opt@boxb
+		\setbox\opt@boxb\vbox to\ht\@outputbox{\unvbox\opt@boxb}
+	\else
+		\setbox\@outputbox\vbox to\ht\opt@boxb{\unvbox\@outputbox}
+	\fi
+	\setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth
+		{\box\opt@boxb \hss}\hfil \vrule width\columnseprule\hfil
+		\hbox to\columnwidth{\box\@outputbox \hss}}}
+	\global\@firstcolumntrue \@combinedblfloats
+	\@outputpage \begingroup \@dblfloatplacement \@startdblcolumn
+	\@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}\endgroup}
+
+\if@LaTeX@eN							% 2.00(3)>>
+\def\opt@warning{\ClassWarning{ipsjpapers}{%
+	Single column floats still remain on biography\MessageBreak
+	processing.\MessageBreak
+	Do \string\verbbiography\space for manual balcing}}
+\else
+\def\opt@warning{\@warning{Single column floats still remain on biography
+	processing.^^J\space\space\space\space\space
+	\space\space\space\space\space\space\space\space\space\space
+	Do \string\verbbiography\space for manual balancing}}
+\fi								% 2.00(3)<<
+\def\opt@split#1#2#3{\setbox#2\vsplit#1to#3\setbox#2\vbox{\unvbox#2}}
+\def\opt@adjust#1#2{\@tempdima\ht#1 \advance\@tempdima-\topskip
+	\@tempdimb\@tempdima \divide\@tempdima\baselineskip
+	\@tempcnta\@tempdima \@tempdima\@tempcnta\baselineskip
+	\advance\@tempdima-\@tempdimb
+	\ifdim\@tempdima<\z@ \advance\@tempdima\baselineskip \fi
+	\advance\@tempdima\baselineskip \advance\@tempdima-\dp#1 
+	\advance\@tempdima-\topskip
+	\setbox\@outputbox\vbox{\ifvoid#1\else\unvbox#1\vskip\@tempdima\fi#2}}
+
+\let\latex@outputpage\@outputpage
+% \opt@finalgap:	vertical space above the \hrule at the end of paper.
+% \opt@finallinewidth:	width of the \hrule at the end of paper.
+\@tempdima2\baselineskip		% This might be changed
+\edef\opt@finalgap{\the\@tempdima}
+\def\opt@finallinewidth{220\@Q}		% This might be changed
+\ifDS@techrep \let\opt@finallinewidth\z@ \fi			% 1.05(2)
+
+\def\@outputpage{\if@finalpageoutput
+	\setbox\@outputbox\vbox{\unvbox\@outputbox}
+	\@tempdima\dp\@outputbox
+	\@tempdimb\ht\@outputbox \advance\@tempdimb\opt@finalgap\relax
+	\ifdim\@tempdimb>\textheight\else
+	\setbox\@outputbox\vbox{\unvbox\@outputbox\vskip-\@tempdima
+		\nointerlineskip\vbox to\z@{\vskip\opt@finalgap
+			\hbox to\textwidth{\hss
+			\vrule height0.4pt width\opt@finallinewidth\hss}
+		\vss}}\fi\fi
+	\ifASCII\if@LaTeX@e \@@topmargin\topmargin \fi\fi	    % 2.00(13)
+	\latex@outputpage}
+
+%%%%%% Biography %%%%%%
+
+% If you want to control the allocation of biographies manually, do
+% \verbbiography and insert \adjust{<vertical materials>} just before
+% \member (or its relatives).  For example;
+% 	\verbbiography
+%	\begin{biography}
+%	\member{...} ...
+%	\adjust{\protect\newpage}
+%	\member{...} ...
+%	\adjust{\protect\vspace{1.3cm}}
+%	\member{...} ...
+%	\end{biography}
+% will make page break just after the biography of the 1st author, and will
+% insert a vertical space of 1.3cm just after that of the 2nd.  It is
+% strongly recommended to \protect any control sequence in the argument of
+% \adjust.
+
+% \$B<uIU(B and \$B:NO?(B define the dates of receipt/acceptance.  They are put at
+% the end of manuscript (just before biographies) by ra@putrcvacc.
+\def\ra@nengo{$BJ?@.(B}	%% Change here when ...
+\ifDS@english
+\def\$B<uIU(B#1#2#3{\def\ra@received{\ra@date{#1}{#2}{#3}}\ignorespaces}
+\def\$B:NO?(B#1#2#3{\def\ra@accepted{\ra@date{#1}{#2}{#3}}\ignorespaces}
+\def\ra@received{??? ??, ????}
+\def\ra@accepted{??? ??, ????}
+\else
+\def\$B<uIU(B#1#2#3{\def\ra@received{#1&#2&#3&}\ignorespaces}
+\def\$B:NO?(B#1#2#3{\def\ra@accepted{#1&#2&#3&}\ignorespaces}
+\def\ra@received{?&?&?&}
+\def\ra@accepted{?&?&?&}
+\fi
+\let\received\$B<uIU(B
+\let\accepted\$B:NO?(B
+
+\def\ra@putrcvacc{\rightline{\vtop{\normalsize\tabskip\z@
+	\ifDS@english
+	    \llap{(Received \ra@received)}\llap{(Accepted \ra@accepted)}\hbox{}
+	\else
+	    \halign{(\ra@nengo\hskip\jasciikanjiskip
+		\hfil##\hfil\hskip\jasciikanjiskip $BG/(B\hskip\jasciikanjiskip&
+		\hfil##\hfil\hskip\jasciikanjiskip $B7n(B\hskip\jasciikanjiskip&
+		\hfil##\hfil\hskip\jasciikanjiskip $BF|(B&##\hfil)\cr
+		\ra@received $B<uIU(B\cr\ra@accepted $B:NO?(B\cr\multispan3\cr}\fi}
+	\hskip\@mojihaba}
+	\nobreak\vskip-2\baselineskip\prevdepth\z@\hbox{}\vskip\baselineskip
+	\penalty\opt@magicpenalty}
+\def\ra@date#1#2#3{\ifcase#2\or
+	January\or February\or March\or April\or May\or June\or
+	July\or August\or September\or October\or November\or December\fi
+	\space#3, #1}
+
+\newbox\bio@picbox
+% The following define the height and width of a picture for biography, and
+% the indentation of the first 6 lines.  They might be changed.
+\def\bio@picheight{100\@Q}
+\def\bio@picwidth{80\@Q}
+
+\newif\ifbio@showpicbox
+\bio@showpicboxtrue
+% Do \bio@showpicboxfalse if you don't want to put a frame box at the
+% position for picture.
+\ifDS@english
+\def\bio@lineheight{9\@Q}
+\def\bio@piclines{7}
+\def\bio@indent{91\@Q}
+\def\bio@hangafter{7}
+\else
+\def\bio@lineheight{8\@Q}
+\def\bio@piclines{6}
+\def\bio@indent{96\@Q}
+\def\bio@hangafter{5}
+\fi
+
+% \verbbiography forces verbatim output of biography (i.e. not ballanced).
+\newif\ifbio@verb \bio@verbfalse
+\def\verbbiography{\global\bio@verbtrue}
+% The environment biography saves texts for biographies into the list of
+% \inserts (for floats).
+\def\biography{\par\ra@putrcvacc
+	\def\member{\bio@member{$B!J@52q0w!K(B}}\def\nomember{\bio@member{}}
+	\def\stmember{\bio@member{$B!J3X@82q0w!K(B}}\let\adjust\bio@adjust
+	\ifbio@showpicbox
+	\setbox\bio@picbox\hbox{\hbox to\z@{\vrule\hskip-0.4pt%
+		\vtop to\bio@picheight{\vskip\z@\hrule width\bio@picwidth
+			\vfil\hrule}\hskip-0.4pt\vrule\hss}}
+	\else
+	\setbox\bio@picbox\hbox{}
+	\fi
+	\@tempdima\bio@piclines\baselineskip \advance\@tempdima\bio@lineheight
+	\dp\bio@picbox\@tempdima
+	\let\bio@egroup\relax\let\+\ignorespaces\let\@elt\relax
+	\def\bio@list{}\global\bio@th\z@}
+
+\def\bio@member#1#2{\bio@egroup\let\bio@egroup\bio@@egroup
+	\@next\@currbox\@freelist\relax
+		{\@latexerr{Too many unprocessed floats and biographies}\@ehb}%
+	\def\@tempa{#2}%
+	\global\setbox\@currbox\hbox\bgroup
+	    \raise\bio@lineheight\copy\bio@picbox
+	    \vtop\bgroup
+		\let\par\\
+		\hangindent\bio@indent\hangafter-\bio@hangafter
+		\ifDS@english {\bf #2\ }%
+		\else {\bf\bio@putauthor#2\+ \@nil}#1{\@@par}\fi\ignorespaces}
+
+% Author name format:
+%	S + G < 5 -> fill space between S/G (like SS__G)
+%	otherwise -> 1 KC space between S/G (like SS_GG)
+\def\bio@putauthor#1 #2\@nil{%
+	\setbox\@tempboxa\hbox{\jintercharskip\z@#1#2}%
+	\setbox\mkt@boxa\hbox{\jintercharskip1cm#1#2}%
+	\ifdim\wd\@tempboxa=\wd\mkt@boxa #1 #2\else
+	\def\@tempa{#2}\ifx\@tempa\empty
+		{\def\+{}\ipsj@warning{Author name #1 doesn't have a space}}%
+								% 2.00(3)
+		#1\else
+	\@tempdima\@mojihaba
+	\mkt@getnamewidth\mkt@sname{#1}\mkt@getnamewidth\mkt@gname{#2}%
+	\advance\mkt@sname\mkt@gname
+	\ifnum\mkt@sname<5\leavevmode\hbox to5\@mojihaba{#1\hfil#2}\else
+		#1#2\fi\fi\fi}
+\def\bio@@egroup{\@@par\hbox{}\egroup\egroup\@tempdima\dp\@currbox
+	\ifdim\@tempdima>\textheight
+		\ipsj@warning{Biography of \@tempa\space is too long}% 2.00(3)
+		\bio@verbtrue \fi
+	\advance\@tempdima\baselineskip\global\advance\bio@th\@tempdima
+	\global\dimen\@currbox\@tempdima \global\count\@currbox\z@
+	{\let\protect\bio@protect\xdef\bio@list{\bio@list\@elt\@currbox}}}
+\def\bio@adjust#1{\bio@egroup\let\bio@egroup\relax
+	\ifbio@verb {\let\protect\bio@protect\xdef\bio@list{\bio@list#1}\fi}}
+\def\bio@protect{\noexpand\protect\noexpand}
+
+\def\endbiography{\bio@egroup \@tempswatrue
+	\ifx\@botlist\@empty\ifx\@deferlist\@empty \@tempswafalse \fi\fi
+	\ifbio@verb\else\if@tempswa \bio@verbtrue \opt@warning\fi\fi
+	\ifbio@verb{\let\@elt\bio@putelt \let\protect\relax \bio@list}%
+	\else\bio@putbio\fi}
+
+\newdimen\bio@colht \newdimen\bio@splitheight
+\newdimen\bio@maxgap \newdimen\bio@lastgap
+\newdimen\bio@th \newdimen\bio@lhA \newdimen\bio@hA \newdimen\bio@hB
+\newdimen\bio@lh \newdimen\bio@rh
+\newdimen\bio@tempdim
+\newif\ifbio@awful
+\newinsert\bio@pbox \count\bio@pbox\@ne
+
+\def\bio@putbio{\let\@elt\relax \let\bio@vskip\relax \allowbreak
+	\bio@colht\@colht \advance\bio@colht-\topskip
+	\advance\bio@colht\baselineskip
+	\@tempdima\bio@colht \advance\@tempdima-\@colroom
+	\advance\@tempdima\pagetotal
+	\if@firstcolumn
+	    \ifdim\@tempdima>\bio@th
+		\global\@lastpagebalancingtrue
+		{\let\@elt\bio@putelt\bio@list}\vskip-\baselineskip
+	    \else
+		\ifdim\pagetotal=\z@\else
+			\dimen\bio@pbox\@tempdima \advance\bio@th\@tempdima
+			\edef\bio@list{\@elt\bio@pbox\bio@list}\fi
+		\bio@splitheight\bio@colht \bio@splitpage
+		\bio@splitheight.5\bio@th
+		\let\bio@awfulput\bio@specialawfulput
+		\bio@trybalance\fi
+	\else \advance\@tempdima\bio@th
+	    \ifdim\@tempdima<\bio@colht
+		\global\@lastpagebalancingtrue
+		\ifdim\pagetotal=\z@ \global\opt@baselineskip2\baselineskip\fi
+		{\let\@elt\bio@putelt\bio@list}\vskip-\baselineskip
+	    \else
+		\let\bio@awfulput\bio@normalawfulput
+		\bio@splitheight\z@ \advance\@tempdima-\bio@th
+		\advance\bio@colht-\@tempdima \bio@splitpage
+		{\let\@elt\bio@putelt\bio@list}\bio@nextpage
+		\bio@trybalance\fi
+	\fi}
+
+\def\bio@trybalance{\bio@split 
+	\let\bio@right\bio@rightA \let\bio@left\bio@leftA
+		\def\bio@rightx{}\def\bio@leftx{}%
+		\let\bio@hX\bio@hA \bio@balance
+		\let\bio@rightxA\bio@rightx \let\bio@leftxA\bio@leftx
+	\ifbio@awful\@tempcnta\tw@\else\@tempcnta\z@\fi
+	\let\bio@right\bio@rightB \let\bio@left\bio@leftB
+		\def\bio@rightx{}\def\bio@leftx{}%
+		\let\bio@hX\bio@hB \bio@balance
+		\let\bio@rightxB\bio@rightx \let\bio@leftxB\bio@leftx
+	\ifbio@awful\advance\@tempcnta\@ne\fi
+	\ifcase\@tempcnta
+		\ifdim\bio@hA<\bio@hB \bio@balanceput\bio@leftxA\bio@rightxA
+		\else \bio@balanceput\bio@leftxB\bio@rightxB\fi
+	\or \bio@balanceput\bio@leftxA\bio@rightxA
+	\or \bio@balanceput\bio@leftxB\bio@rightxB
+	\else \bio@awfulput\fi
+	\ifx\bio@deferred\empty\vskip-\baselineskip\let\next\relax
+	\else\bio@nextpage\let\next\bio@trybalance\fi\next}
+
+\def\bio@split{\def\bio@leftA{}\def\bio@leftB{}%
+	\def\bio@rightA{}\def\bio@rightB{}%
+	\bio@lhA\z@\@tempdimb\z@ \bio@isplit}
+\def\bio@isplit{\ifx\bio@list\empty\let\next\relax\else
+	\bio@car\@tempdima\@currbox\bio@list
+	\bio@lhA\@tempdimb\advance\@tempdimb\@tempdima
+	\edef\bio@leftB{\bio@leftB\@elt\@currbox}%
+	\ifdim\@tempdimb>\bio@splitheight
+		\edef\bio@rightA{\@elt\@currbox\bio@list}%
+		\let\bio@rightB\bio@list \let\next\relax
+	\else\edef\bio@leftA{\bio@leftA\@elt\@currbox}\let\next\bio@isplit
+	\fi\fi\next}
+
+\def\bio@balanceput#1#2{{\let\@elt\bio@putelt\let\bio@vskip\bio@xvskip
+	#1\bio@newpage#2}}
+\def\bio@normalawfulput{{\let\bio@vskip\@gobble \@tempcnta\z@ 
+	\@tempdima\z@ \bio@addheight\@tempdima\bio@leftxB
+	\ifdim\@tempdima<\bio@colht
+		\@tempdima\z@ \bio@addheight\@tempdima\bio@rightxB
+		\ifdim\@tempdima<\bio@colht \@tempcnta\@ne
+			\let\@elt\bio@putelt
+			\bio@leftxB\bio@newpage\bio@rightxB\fi\fi
+	\ifnum\@tempcnta=\z@
+		\@tempdima\z@ \bio@addheight\@tempdima\bio@leftxA
+		\ifdim\@tempdima<\bio@colht
+			\@tempdima\z@\bio@addheight\@tempdima\bio@rightxA
+			\ifdim\@tempdima<\bio@colht \@tempcnta\@ne
+				\let\@elt\bio@putelt
+				\bio@leftxA\bio@newpage\bio@rightxA\fi\fi\fi
+% The following may be redundant.
+	\ifnum\@tempcnta=\z@
+		\let\@elt\bio@putelt\bio@listsave\fi}}
+\def\bio@specialawfulput{{\advance\bio@th-\dimen\bio@pbox
+	\ifdim\bio@th<\bio@colht\bio@newpage
+	\let\bio@newpage\relax\fi\bio@normalawfulput}}
+
+\def\bio@putelt#1{\ifnum\count#1>\z@\else\box#1
+	\nobreak\vskip-2\baselineskip\prevdepth\z@\hbox{}
+	\vskip\baselineskip\fi}
+\def\bio@xvskip#1{\vskip#1\prevdepth\z@}
+\def\bio@newpage{\vskip-\baselineskip\newpage}
+
+\def\bio@nextpage{\bio@newpage \let\bio@list\bio@deferred
+	\bio@th\z@ \bio@addheight\bio@th\bio@list
+	\bio@colht\@colht \advance\bio@colht-\topskip
+	\advance\bio@colht\baselineskip
+	\bio@splitheight\bio@colht \bio@splitpage
+	\bio@splitheight.5\bio@th
+	\let\bio@awfulput\bio@normalawfulput}
+\def\bio@splitpage{\let\bio@listsave\bio@list \bio@split
+	\@tempdima\bio@th \advance\@tempdima-\bio@lhA
+	\ifdim\@tempdima>\bio@colht
+		\let\bio@leftAsave\bio@leftA \bio@th\bio@lhA
+		\let\bio@list\bio@rightA \bio@splitheight\bio@colht
+		\bio@split \edef\bio@list{\bio@leftAsave\bio@leftA}%
+		\advance\bio@th\bio@lhA
+		\let\bio@deferred\bio@rightA
+	\else\def\bio@deferred{}\let\bio@list\bio@listsave\fi}
+
+% \bio@tolerablegap:	maximum tolerable gap between adjacent bio's.
+% \bio@tolerablestretch:maximum stretch of a column.
+
+\@tempdima10\baselineskip		% This might be changed
+\edef\bio@tolerablegap{\the\@tempdima}
+\@tempdima15\baselineskip
+\edef\bio@tolerablelastgap{\the\@tempdima}
+\def\bio@tolerablestretch{2}		% This might be changed
+
+\def\bio@balance{\let\@elt\relax \edef\bio@bstack{%
+		\@elt{{\bio@left}{\bio@right}{}{}{0pt}}}
+	\bio@xbalance}
+\def\bio@xbalance{%
+	\expandafter\bio@popstack\bio@bstack\@nil
+	\let\bio@nextA\bio@xbalance \@tempdima\z@
+	\ifx\bio@left\empty \ifx\bio@right\empty
+		\let\bio@nextA\bio@balanceend
+	\else
+		\bio@addheight\@tempdima\bio@right
+		\edef\bio@leftx{\bio@leftx\bio@vskip{\the\@tempdima}}%
+		\advance\bio@hX\@tempdima
+		\edef\bio@rightx{\bio@rightx\bio@right}\def\bio@right{}%
+		\bio@pushstack \fi\else
+	\ifx\bio@right\empty
+		\bio@addheight\@tempdima\bio@left
+		\edef\bio@rightx{\bio@rightx\bio@vskip{\the\@tempdima}}%
+		\advance\bio@hX\@tempdima
+		\edef\bio@leftx{\bio@leftx\bio@left}\def\bio@left{}%
+		\bio@pushstack \else
+	\bio@car\@tempdima\bio@leftbox\bio@left
+	\bio@car\@tempdimb\bio@rightbox\bio@right
+	\edef\bio@leftx{\bio@leftx\@elt\bio@leftbox}%
+	\edef\bio@rightx{\bio@rightx\@elt\bio@rightbox}%
+	\ifdim\@tempdima>\@tempdimb
+		\advance\bio@hX\@tempdima
+		\let\bio@da\@tempdima\let\bio@db\@tempdimb
+		\bio@ibalance\bio@left\bio@right\bio@leftx\bio@rightx
+	\else	\advance\bio@hX\@tempdimb
+		\let\bio@da\@tempdimb\let\bio@db\@tempdima
+		\bio@ibalance\bio@right\bio@left\bio@rightx\bio@leftx\fi
+	\fi\fi\bio@nextA}
+\def\bio@ibalance#1#2#3#4{\let\bio@nextB\relax
+	\ifx#2\empty 
+		\advance\bio@da-\bio@db
+		\edef#4{#4\bio@vskip{\the\bio@da}}\bio@pushstack\else
+	\bio@car\bio@tempdim\@currbox#2 \advance\bio@db\bio@tempdim
+	\ifdim\bio@da<\bio@db
+		\advance\bio@db-\bio@da
+		\let\@tempa#3\edef#3{#3\bio@vskip{\the\bio@db}}%
+		\let\@tempb#4\edef#4{#4\@elt\@currbox}%
+		\advance\bio@hX\bio@db \bio@pushstack
+		\advance\bio@hX-\bio@db
+		\edef#2{\@elt\@currbox#2}%
+		\advance\bio@tempdim-\bio@db
+		\let#3\@tempa \edef#4{\@tempb\bio@vskip{\the\bio@tempdim}}%
+		\bio@pushstack
+	\else \edef#4{#4\@elt\@currbox}\def\bio@nextB{\bio@ibalance#1#2#3#4}%
+	\fi\fi\bio@nextB}
+\def\bio@balanceend{\bio@awfulfalse \def\bio@bstack{}%
+	\bio@maxgap\z@ \bio@lastgap\z@
+	\bio@checkgap\bio@leftx \bio@checkgap\bio@rightx
+	\ifdim\bio@maxgap>\bio@tolerablegap\relax\bio@awfultrue\fi
+	\ifdim\bio@lastgap>\bio@tolerablelastgap\relax\bio@awfultrue\fi
+	\ifdim\bio@hX>\bio@tolerablestretch\bio@splitheight\bio@awfultrue\fi
+	\ifdim\bio@hX>\bio@colht\bio@awfultrue\fi}
+\def\bio@checkgap#1{{\@tempdima\z@ \@tempdimb\z@ \bio@tempdim\z@
+	\let\@elt\bio@cgelt \let\bio@vskip\bio@cgvskip #1\relax
+	\ifdim\@tempdima>\bio@maxgap \global\bio@maxgap\@tempdima \fi
+	\ifdim\bio@tempdim>\bio@lastgap \global\bio@lastgap\bio@tempdim \fi}}
+\def\bio@cgvskip#1{\advance\bio@tempdim#1\relax
+	\ifdim\bio@tempdim>\@tempdimb \@tempdimb\bio@tempdim\fi}
+\def\bio@cgelt#1{\@tempdima\@tempdimb \bio@tempdim\z@}
+\def\bio@popstack\@elt#1#2\@nil{\edef\bio@bstack{#2}\bio@ipopstack#1}
+\def\bio@ipopstack#1#2#3#4#5{\def\bio@left{#1}\def\bio@right{#2}%
+	\def\bio@leftx{#3}\def\bio@rightx{#4}\bio@hX#5\relax}
+\def\bio@pushstack{\def\bio@bstackx{}%
+	\expandafter\bio@ipushstack\bio@bstack\@elt\@nil}
+\def\bio@ipushstack\@elt#1{\def\@tempc{#1}%
+	\ifx\@tempc\@nnil \edef\bio@bstack{\bio@bstackx\bio@stackelt}%
+		\let\bio@nextC\relax \else
+	\bio@iipushstack#1\fi\bio@nextC}
+\def\bio@iipushstack#1#2#3#4#5{\ifdim#5>\bio@hX
+	\edef\bio@bstackx{\bio@bstackx\bio@stackelt
+		\@elt{{#1}{#2}{#3}{#4}{#5}}}%
+		\let\bio@nextC\bio@pushstackend\else
+	\edef\bio@bstackx{\bio@bstackx
+		\@elt{{#1}{#2}{#3}{#4}{#5}}}%
+		\let\bio@nextC\bio@ipushstack\fi}
+\def\bio@pushstackend#1\@elt\@nil{\edef\bio@bstack{\bio@bstackx#1}}
+\def\bio@stackelt{\@elt{{\bio@left}{\bio@right}{\bio@leftx}{\bio@rightx}%
+	{\the\bio@hX}}}
+\def\bio@addheight#1#2{\def\@elt##1{\advance#1\dimen##1}#2\let\@elt\relax}
+\def\bio@car#1#2#3{\expandafter\bio@icar#3\@nil#1#2#3}
+\def\bio@icar\@elt#1#2\@nil#3#4#5{#3=\dimen#1\relax\def#4{#1}\def#5{#2}}
+
+
+%%%%%% Miscellaneous %%%%%%
+
+\flushbottom
+
+\ifDS@english
+\hbadness9999 \tolerance9999
+\else
+\hbadness5000 \tolerance5000
+\pretolerance\m@ne
+\fi
+
+\input{ipsjcommon.sty}
+
+\twocolumn
+
+\endinput
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsjsort.bst	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,1340 @@
+% ipsjsort.bst nakasima@kuis.kyoto-u.ac.jp (Hiroshi Nakashima)
+% jssst.bst tomura@etl.go.jp (Satoru Tomura)
+% BibTeX standard bibliography style `jplain'
+	% version 0.10 for JBibTeX versions 0.10 or later, JLaTeX version 2.09.
+	% by Shouichi Matsui, matsui@denken.junet
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    volume
+    year
+    yomi
+  }
+  {}
+  { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+INTEGERS { before.year }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+  #4 'before.year :=	% year doesn't follows "," nor ".". (H.N.)
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+	{ add.period$ write$
+	  newline$
+	  "\newblock " write$
+	}
+	{ output.state before.all =
+	    'write$
+	    { output.state before.year =
+% year doesn't follows "," nor ".". (H.N.)
+		{ " " * write$ }
+		{ add.period$ " " * write$ }
+	      if$
+	    }
+	  if$
+	}
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {required.argument}
+{ 't :=
+  empty$
+    {"Missing required argument " t * " in " * cite$ * warning$}
+    'skip$
+  if$
+}
+
+FUNCTION {required.exclusive.or.argument}
+{ 't :=
+  empty$
+    { 's := 
+      empty$
+        { t " or " * s * " is missing in " * cite$ * warning$}
+        'skip$
+      if$
+    }
+    { 's :=
+      empty$
+        'skip$
+        { "You can use only one of " t * " and " * s * " in " * cite$ * warning$}
+      if$
+    }
+  if$
+}
+
+FUNCTION {required.and.or.argument}
+{ 't := empty$
+     { 's := empty$
+         { "there's no " t * " and/or " * s * cite$ * warning$ }
+         'skip$
+       if$
+     }
+     { pop$ pop$ }
+  if$
+}
+
+FUNCTION {optional.series.volume.number.argument}
+{ series empty$
+    { volume empty$
+        { number empty$
+            'skip$
+            { "there's a number but no series in " cite$ * warning$ }
+          if$
+        }
+        { number empty$
+            { "there's a volume but no series in " cite$ * warning$ }
+            { "you can use only one of volume and number in " cite$ * warning$}
+          if$
+        }
+     if$
+    }
+    { volume empty$
+        { number empty$
+            { "there's a series but neither volume nor number in " cite$ * warning$ }
+            'skip$
+          if$
+        }
+        { number empty$
+            'skip$
+            { "you can use only one of volume and number in " cite$ * warning$ }
+          if$
+        }
+     if$
+   }
+   if$
+}            
+
+FUNCTION {output.bibitem}
+{ newline$
+  "\bibitem{" write$
+  cite$ write$
+  "}" write$
+  newline$
+  before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+	'skip$
+	{ after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {is.kanji}
+%%%{ #1 text.prefix$ chr.to.int$ #127 > }
+%%%{ #1 #1 substring$ chr.to.int$ #127 > }
+%%%{ purify$ #1 text.prefix$ chr.to.int$ #127 >}
+{ is.kanji.str$ }
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { duplicate$ is.kanji
+        'skip$
+        { "{\em " swap$ * "\/}" * }
+      if$
+    }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr
+        s nameptr "{ll}" format.name$ is.kanji
+           { "{ff}{vv}{ll}" }
+           { "{vv }{ll}{, jj}{, f.}" }
+        if$
+      format.name$ 't :=
+      nameptr #1 >
+	{ namesleft #1 >
+	    { ", " * t * }
+	    {
+%	      numnames #2 >
+%		{ "," * }
+%		'skip$
+%	      if$
+% Don't put "," before "and" (H.N.)
+%
+%	      numnames #3 <
+%		{ t is.kanji
+%		    {"," * "" *} 'skip$ if$
+%		}
+%		'skip$
+%    	      if$
+% Don't put "," before "$B$[$+(B" (H.N.)
+%
+	      t "others" =
+		{ s is.kanji
+			{"$B$[$+(B" * }
+			{" et al." * }
+		      if$
+                }
+		{ s is.kanji
+%			{" " * t * }
+			{", " * t * }	% put "," here for Kanji (H.N.)
+			{" and " * t * }
+	     	      if$
+		}
+	      if$
+	    }
+	  if$
+	}
+	't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ editor is.kanji
+		{"($BJT(B)" * } %%{", editors" * } if$
+                            {"(eds.)" *} if$
+	}
+	{ editor is.kanji
+		{"($BJT(B)" *}  %%{", editor" * } if$
+                            {"(ed.)" *} if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+	{ t #1 #2 substring$ "--" = not
+	    { "--" *
+	      t #2 global.max$ substring$ 't :=
+	    }
+	    {   { t #1 #1 substring$ "-" = }
+		{ "-" *
+		  t #2 global.max$ substring$ 't :=
+		}
+	      while$
+	    }
+	  if$
+	}
+	{ t #1 #1 substring$ *
+	  t #2 global.max$ substring$ 't :=
+	}
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.date}
+{ before.year 'output.state :=	% year doesn't follows "," nor ".". (H.N.)
+  year empty$
+    { month empty$
+	{ "" }
+	{ "there's a month but no year in " cite$ * warning$
+%	  month			% no worth to put month only. (H.N.)
+          ""
+	}
+      if$
+    }
+%   { month empty$
+%	'year
+%	{ month " " * year * }
+%     if$
+%   }
+% month is not printed even if it is given. (H.N.)
+%
+    { "(" year ")" * * }	% year is surrounded by parens. (H.N.)
+  if$
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { "\ " }
+  if$
+  swap$ * *
+}
+
+FUNCTION {output.volume}
+{ 
+  volume empty$
+    'skip$
+    { "Vol.~" volume * output}
+  if$
+
+}
+
+FUNCTION {output.number}
+{
+  number empty$
+    'skip$
+    { "No.~" number * output}
+  if$
+}
+
+FUNCTION {output.series.volume.number}
+{ series empty$
+    { output.volume
+      output.number }
+    { series is.kanji
+      volume empty$
+      number empty$
+      or
+      and
+        { series " " * volume * number * output}
+        { series output
+          output.volume
+          output.number}
+      if$
+   }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+    { "" }
+    { output.state mid.sentence =
+	{ edition "l" change.case$ " edition" * }
+	{ edition "t" change.case$ " edition" * }
+      if$
+    }
+  if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+	{ #1 'multiresult := }
+	{ t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+%	{ "pp.~" pages n.dashify tie.or.space.connect }
+%	{ "pp.~" pages tie.or.space.connect }
+% '~' might be add by tie.or.space.connect. (H.N.)
+% "p." is probably better for single page reference (H.N.)
+	{ "pp." pages n.dashify tie.or.space.connect }
+	{ "p." pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+% This function is replaced by format.vol.num.pages (H.N.)
+%FUNCTION {format.volume.number.year.pages}
+%{ volume empty$
+%    { number empty$
+%        { year empty$
+%             { "" }
+%             { "(" year * ")" * }
+%          if$}
+%        { year empty$
+%             { "No.~" number * }
+%             { "No.~" number * "(" * year * ")" * }
+%         if$}
+%      if$}
+%    { number empty$
+%        { year empty$
+%             { "Vol.~" volume * }
+%             { "Vol.~" volume * "(" * year * ")" * }
+%          if$}
+%        { year empty$
+%             {"Vol.~" volume * "," * "No.~" * number * }
+%             {"Vol.~" volume * "," * "No.~" * number * "(" * year * ")" * }
+%         if$}
+%      if$}
+%   if$
+%  pages empty$
+%    'skip$
+%    { duplicate$ empty$
+%	{ pop$ format.pages }
+%	{ "," * " pp.~" * pages n.dashify * }
+%      if$
+%    }
+%  if$
+%}
+
+FUNCTION {format.vol.num.pages}
+{ volume empty$
+  { ""}
+  { " Vol.~" volume * }
+  if$ 
+  number empty$
+    'skip$
+    { volume empty$
+	{ "there's a number but no volume in " cite$ * warning$ }
+	{ "," *}
+      if$
+      " No.~" number * *
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+	{ pop$ format.pages }
+	{ ", " * format.pages * }
+% tieing "pp." and the first page will be too hard for a narrow column. (H.N.)
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+	{ "chapter" chapter tie.or.space.connect }
+        { type is.kanji 
+             { chapter type tie.or.space.connect }
+             { type "l" change.case$ chapter tie.or.space.connect }
+          if$
+        }
+      if$
+      pages empty$
+	'skip$
+	{ ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+    { "" }
+    { editor empty$
+	{ booktitle is.kanji
+	    { " " booktitle emphasize * }
+	    { " " booktitle emphasize * }
+	  if$
+	}
+	{ booktitle is.kanji
+%	    { booktitle emphasize "(" * format.editors * ")" *}
+%	    { booktitle emphasize "(" * format.editors * ")" *}
+% awful without leading space (H.N.)
+	    { booktitle emphasize " (" * format.editors * ")" *}
+	    { booktitle emphasize " (" * format.editors * ")" *}
+	  if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+  key empty$ not and
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+    'skip$
+    { pop$
+      type "t" change.case$
+    }
+  if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+    { title empty$
+        { "Technical Report" }
+        { title is.kanji
+            { "$B5;=QJs9p(B" }
+            { "Technical Report" }
+          if$
+        }
+      if$
+    }
+    {type}
+  if$
+  number empty$
+    { "t" change.case$ }
+    { number tie.or.space.connect }
+  if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+    { journal empty$
+	{ "need key or journal for " cite$ * " to crossref " * crossref *
+	  warning$
+	  ""
+	}
+	{ "In " journal emphasize * }
+      if$
+    }
+    { "In " key * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv }{ll}" format.name$
+  editor num.names$ duplicate$
+  #2 >
+    { editor is.kanji
+	  {pop$ " $B$[$+(B" *} {pop$ " et al." * } if$
+    }
+    { #2 <
+	'skip$
+	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+	    { editor is.kanji
+		{" $B$[$+(B" *} {"et al." * } if$
+	    }
+	    { editor is.kanji
+		{" " * editor #2 "{vv }{ll}" format.name$ * }
+		{" and " * editor #2 "{vv }{ll}" format.name$ * }
+	      if$
+	    }
+	  if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      title is.kanji
+	{"  "} {"In "} if$
+    }
+    { "Volume" volume tie.or.space.connect
+      " of " *
+    }
+  if$
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+	{ series empty$
+	    { "need editor, key, or series for " cite$ * " to crossref " *
+	      crossref * warning$
+	      "" *
+	    }
+	    { series emphasize }
+	  if$
+	}
+	{ key * }
+      if$
+    }
+    { format.crossref.editor * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+	{ booktitle empty$
+	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
+	      crossref * warning$
+	      ""
+	    }
+	    { booktitle is.kanji
+		booktitle
+		{"In " booktitle emphasize * }
+	       if$
+	    }
+	  if$
+	}
+	{ "In " key * }
+      if$
+    }
+    { title is.kanji
+	{" " format.crossref.editor * }
+	{"In " format.crossref.editor * }
+      if$
+    }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ 
+%%%%
+  author  "author"  required.argument
+  title   "title"   required.argument
+  journal "journal" required.argument
+  year    "year"    required.argument
+%%%% jssst
+  volume  "volume"  
+  number  "number"  
+     required.and.or.argument
+  pages   "pages"   required.argument
+%%%%
+  output.bibitem 
+  format.authors ": " *
+  title output
+  crossref missing$
+    { journal emphasize output
+%     format.volume.number.year.pages output
+% date is always at the end. (H.N.)
+      format.vol.num.pages output
+      format.date output
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ 
+%%%%
+  author  "author"
+  editor  "editor"
+    required.exclusive.or.argument
+  title   "title"  required.argument
+  publisher "publisher" required.argument
+  year    "year" required.argument
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem
+  author empty$
+    { format.editors}
+    { format.authors}
+  if$
+  ": " *
+  title emphasize output
+  crossref missing$
+    { output.series.volume.number
+      publisher output
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {booklet}
+{
+%%%%
+  title   "title"   required.argument
+%%%% jssst
+  author  "author"  required.argument
+%%%%
+  output.bibitem
+  format.authors  ": " *
+  title output
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ 
+%%%%
+  author  "author"
+  editor  "editor"
+     required.exclusive.or.argument
+  title   "title"  required.argument
+  chapter "chapter"
+  pages   "pages"
+     required.and.or.argument
+  publisher  "publisher" required.argument
+  year       "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem 
+  author empty$
+    { format.editors}
+    { format.authors}
+  if$
+  ": " *
+  title emphasize output
+  crossref missing$
+    { output.series.volume.number
+      publisher output
+    }
+    { format.chapter.pages output
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+% format.date output
+  format.chapter.pages output
+  format.date output		% date is always at the end. (H.N.)
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{
+%%%%
+  author    "author"    required.argument
+  title     "title"     required.argument
+  booktitle "booktitle" required.argument
+  publisher "publisher" required.argument
+  year      "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem
+  format.authors ": " *
+  title output
+  crossref missing$
+    { format.in.ed.booktitle output
+      output.series.volume.number
+      publisher output
+      address output
+      format.edition output
+      format.chapter.pages output	% date is always at the end. (H.N.)
+      format.date output
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+% format.chapter.pages output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{
+%%%%
+  author    "author"    required.argument
+  title     "title"     required.argument
+  booktitle "booktitle" required.argument
+  year      "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem 
+  format.authors ": " *
+  title output
+  crossref missing$
+    { format.in.ed.booktitle output
+      output.series.volume.number
+      address output
+      organization output
+      publisher output
+%     format.date output
+      format.pages output
+      format.date output	% date is always at the end. (H.N.)
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{	
+%%%%
+  title   "title"    required.argument
+%%%% jssst
+  author   "author"
+  organization "organazaion"
+     required.exclusive.or.argument
+%%%%
+  output.bibitem
+  author empty$
+    { organization}
+    { format.authors}
+  if$
+  ": " *
+  title emphasize output
+  author empty$
+    'skip$
+    { organization output }
+  if$
+  address output
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{
+%%%%
+  author   "author"  required.argument
+  title    "title"   required.argument
+  school   "school"  required.argument
+  year     "year"    required.argument
+%%%%
+  output.bibitem
+  format.authors ": " *
+  title output
+  author empty$
+    { "Master's thesis" }
+    { author is.kanji
+        { "$B=$;NO@J8(B" }  
+        { "Master's thesis" }
+      if$
+    }
+  if$
+  format.thesis.type output.nonnull
+  school output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{
+%%%%
+%%%% jssst
+  author "author" required.argument
+  title  "title"  required.argument
+%%%%
+  output.bibitem
+  format.authors 
+  ": " *
+  title output
+  howpublished output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{
+%%%%
+  author   "author"  required.argument
+  title    "title"   required.argument
+  school   "school"  required.argument
+  year     "year"    required.argument
+%%%%
+  output.bibitem 
+  format.authors ": " *
+  title emphasize output
+  author empty$
+    { "PhD Thesis" }
+    { author is.kanji
+        { "$BGn;NO@J8(B" }
+        { "PhD Thesis" }
+      if$
+    }
+  if$
+  format.thesis.type output.nonnull
+  school output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{
+%%%%
+  title  "title"  required.argument
+  year   "year"   required.argument
+
+  optional.series.volume.number.argument
+%%%% jssst
+  editor  "editor"
+  organization "organization"
+      required.exclusive.or.argument 
+%%%%
+  output.bibitem 
+  editor empty$
+    { organization }
+    { format.editors }
+  if$
+  ": " *
+  title emphasize output
+  output.series.volume.number
+  address output
+  editor empty$
+    'skip$
+    { organization output }
+  if$
+  publisher output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{
+%%%%
+  author   "author"   required.argument
+  title    "title"    required.argument
+  institution "institution" required.argument
+  year     "year"     required.argument
+%%%%
+  output.bibitem
+  format.authors  ": " *
+  title output
+  format.tr.number output.nonnull
+  institution output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{
+%%%%
+  author   "author"   required.argument
+  title    "title"    required.argument
+  note     "note"     required.argument
+%%%%
+  output.bibitem
+  format.authors ": " *
+  title output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  yomi empty$
+     'skip$
+     { yomi 's := }
+  if$
+
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+	{ "   " * }
+	'skip$
+      if$
+      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
+      nameptr numnames = t "others" = and
+	{ "et al" * }
+	{ t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+	{ "to sort, need author or key in " cite$ * warning$
+	  ""
+	}
+	{ key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { "to sort, need author, editor, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need author, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need editor, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+	'editor.organization.sort
+	{ type$ "manual" =
+	    'author.organization.sort
+	    'author.sort
+	  if$
+	}
+      if$
+    }
+  if$
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #1 'number.label :=
+  #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+  number.label #1 + 'number.label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsjunsrt.bst	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,1190 @@
+% ipsjsort.bst nakasima@kuis.kyoto-u.ac.jp (Hiroshi Nakashima)
+% jssst.bst tomura@etl.go.jp (Satoru Tomura)
+% BibTeX standard bibliography style `jplain'
+	% version 0.10 for JBibTeX versions 0.10 or later, JLaTeX version 2.09.
+	% by Shouichi Matsui, matsui@denken.junet
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    volume
+    year
+    yomi
+  }
+  {}
+  { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+INTEGERS { before.year }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+  #4 'before.year :=	% year doesn't follows "," nor ".". (H.N.)
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+	{ add.period$ write$
+	  newline$
+	  "\newblock " write$
+	}
+	{ output.state before.all =
+	    'write$
+	    { output.state before.year =
+% year doesn't follows "," nor ".". (H.N.)
+		{ " " * write$ }
+		{ add.period$ " " * write$ }
+	      if$
+	    }
+	  if$
+	}
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {required.argument}
+{ 't :=
+  empty$
+    {"Missing required argument " t * " in " * cite$ * warning$}
+    'skip$
+  if$
+}
+
+FUNCTION {required.exclusive.or.argument}
+{ 't :=
+  empty$
+    { 's := 
+      empty$
+        { t " or " * s * " is missing in " * cite$ * warning$}
+        'skip$
+      if$
+    }
+    { 's :=
+      empty$
+        'skip$
+        { "You can use only one of " t * " and " * s * " in " * cite$ * warning$}
+      if$
+    }
+  if$
+}
+
+FUNCTION {required.and.or.argument}
+{ 't := empty$
+     { 's := empty$
+         { "there's no " t * " and/or " * s * cite$ * warning$ }
+         'skip$
+       if$
+     }
+     { pop$ pop$ }
+  if$
+}
+
+FUNCTION {optional.series.volume.number.argument}
+{ series empty$
+    { volume empty$
+        { number empty$
+            'skip$
+            { "there's a number but no series in " cite$ * warning$ }
+          if$
+        }
+        { number empty$
+            { "there's a volume but no series in " cite$ * warning$ }
+            { "you can use only one of volume and number in " cite$ * warning$}
+          if$
+        }
+     if$
+    }
+    { volume empty$
+        { number empty$
+            { "there's a series but neither volume nor number in " cite$ * warning$ }
+            'skip$
+          if$
+        }
+        { number empty$
+            'skip$
+            { "you can use only one of volume and number in " cite$ * warning$ }
+          if$
+        }
+     if$
+   }
+   if$
+}            
+
+FUNCTION {output.bibitem}
+{ newline$
+  "\bibitem{" write$
+  cite$ write$
+  "}" write$
+  newline$
+  before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+	'skip$
+	{ after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {is.kanji}
+%%%{ #1 text.prefix$ chr.to.int$ #127 > }
+%%%{ #1 #1 substring$ chr.to.int$ #127 > }
+%%%{ purify$ #1 text.prefix$ chr.to.int$ #127 >}
+{ is.kanji.str$ }
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { duplicate$ is.kanji
+        'skip$
+        { "{\em " swap$ * "\/}" * }
+      if$
+    }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr
+        s nameptr "{ll}" format.name$ is.kanji
+           { "{ff}{vv}{ll}" }
+           { "{vv }{ll}{, jj}{, f.}" }
+        if$
+      format.name$ 't :=
+      nameptr #1 >
+	{ namesleft #1 >
+	    { ", " * t * }
+	    {
+%	      numnames #2 >
+%		{ "," * }
+%		'skip$
+%	      if$
+% Don't put "," before "and" (H.N.)
+%
+%	      numnames #3 <
+%		{ t is.kanji
+%		    {"," * "" *} 'skip$ if$
+%		}
+%		'skip$
+%    	      if$
+% Don't put "," before "$B$[$+(B" (H.N.)
+%
+	      t "others" =
+		{ s is.kanji
+			{"$B$[$+(B" * }
+			{" et al." * }
+		      if$
+                }
+		{ s is.kanji
+%			{" " * t * }
+			{", " * t * }	% put "," here for Kanji (H.N.)
+			{" and " * t * }
+	     	      if$
+		}
+	      if$
+	    }
+	  if$
+	}
+	't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ editor is.kanji
+		{"($BJT(B)" * } %%{", editors" * } if$
+                            {"(eds.)" *} if$
+	}
+	{ editor is.kanji
+		{"($BJT(B)" *}  %%{", editor" * } if$
+                            {"(ed.)" *} if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+	{ t #1 #2 substring$ "--" = not
+	    { "--" *
+	      t #2 global.max$ substring$ 't :=
+	    }
+	    {   { t #1 #1 substring$ "-" = }
+		{ "-" *
+		  t #2 global.max$ substring$ 't :=
+		}
+	      while$
+	    }
+	  if$
+	}
+	{ t #1 #1 substring$ *
+	  t #2 global.max$ substring$ 't :=
+	}
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.date}
+{ before.year 'output.state :=	% year doesn't follows "," nor ".". (H.N.)
+  year empty$
+    { month empty$
+	{ "" }
+	{ "there's a month but no year in " cite$ * warning$
+%	  month			% no worth to put month only. (H.N.)
+          ""
+	}
+      if$
+    }
+%   { month empty$
+%	'year
+%	{ month " " * year * }
+%     if$
+%   }
+% month is not printed even if it is given. (H.N.)
+%
+    { "(" year ")" * * }	% year is surrounded by parens. (H.N.)
+  if$
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { "\ " }
+  if$
+  swap$ * *
+}
+
+FUNCTION {output.volume}
+{ 
+  volume empty$
+    'skip$
+    { "Vol.~" volume * output}
+  if$
+
+}
+
+FUNCTION {output.number}
+{
+  number empty$
+    'skip$
+    { "No.~" number * output}
+  if$
+}
+
+FUNCTION {output.series.volume.number}
+{ series empty$
+    { output.volume
+      output.number }
+    { series is.kanji
+      volume empty$
+      number empty$
+      or
+      and
+        { series " " * volume * number * output}
+        { series output
+          output.volume
+          output.number}
+      if$
+   }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+    { "" }
+    { output.state mid.sentence =
+	{ edition "l" change.case$ " edition" * }
+	{ edition "t" change.case$ " edition" * }
+      if$
+    }
+  if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+	{ #1 'multiresult := }
+	{ t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+%	{ "pp.~" pages n.dashify tie.or.space.connect }
+%	{ "pp.~" pages tie.or.space.connect }
+% '~' might be add by tie.or.space.connect. (H.N.)
+% "p." is probably better for single page reference (H.N.)
+	{ "pp." pages n.dashify tie.or.space.connect }
+	{ "p." pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+% This function is replaced by format.vol.num.pages (H.N.)
+%FUNCTION {format.volume.number.year.pages}
+%{ volume empty$
+%    { number empty$
+%        { year empty$
+%             { "" }
+%             { "(" year * ")" * }
+%          if$}
+%        { year empty$
+%             { "No.~" number * }
+%             { "No.~" number * "(" * year * ")" * }
+%         if$}
+%      if$}
+%    { number empty$
+%        { year empty$
+%             { "Vol.~" volume * }
+%             { "Vol.~" volume * "(" * year * ")" * }
+%          if$}
+%        { year empty$
+%             {"Vol.~" volume * "," * "No.~" * number * }
+%             {"Vol.~" volume * "," * "No.~" * number * "(" * year * ")" * }
+%         if$}
+%      if$}
+%   if$
+%  pages empty$
+%    'skip$
+%    { duplicate$ empty$
+%	{ pop$ format.pages }
+%	{ "," * " pp.~" * pages n.dashify * }
+%      if$
+%    }
+%  if$
+%}
+
+FUNCTION {format.vol.num.pages}
+{ volume empty$
+  { ""}
+  { " Vol.~" volume * }
+  if$ 
+  number empty$
+    'skip$
+    { volume empty$
+	{ "there's a number but no volume in " cite$ * warning$ }
+	{ "," *}
+      if$
+      " No.~" number * *
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+	{ pop$ format.pages }
+	{ ", " * format.pages * }
+% tieing "pp." and the first page will be too hard for a narrow column. (H.N.)
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+	{ "chapter" chapter tie.or.space.connect }
+        { type is.kanji 
+             { chapter type tie.or.space.connect }
+             { type "l" change.case$ chapter tie.or.space.connect }
+          if$
+        }
+      if$
+      pages empty$
+	'skip$
+	{ ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+    { "" }
+    { editor empty$
+	{ booktitle is.kanji
+	    { " " booktitle emphasize * }
+	    { " " booktitle emphasize * }
+	  if$
+	}
+	{ booktitle is.kanji
+%	    { booktitle emphasize "(" * format.editors * ")" *}
+%	    { booktitle emphasize "(" * format.editors * ")" *}
+% awful without leading space (H.N.)
+	    { booktitle emphasize " (" * format.editors * ")" *}
+	    { booktitle emphasize " (" * format.editors * ")" *}
+	  if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+  key empty$ not and
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+    'skip$
+    { pop$
+      type "t" change.case$
+    }
+  if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+    { title empty$
+        { "Technical Report" }
+        { title is.kanji
+            { "$B5;=QJs9p(B" }
+            { "Technical Report" }
+          if$
+        }
+      if$
+    }
+    {type}
+  if$
+  number empty$
+    { "t" change.case$ }
+    { number tie.or.space.connect }
+  if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+    { journal empty$
+	{ "need key or journal for " cite$ * " to crossref " * crossref *
+	  warning$
+	  ""
+	}
+	{ "In " journal emphasize * }
+      if$
+    }
+    { "In " key * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv }{ll}" format.name$
+  editor num.names$ duplicate$
+  #2 >
+    { editor is.kanji
+	  {pop$ " $B$[$+(B" *} {pop$ " et al." * } if$
+    }
+    { #2 <
+	'skip$
+	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+	    { editor is.kanji
+		{" $B$[$+(B" *} {"et al." * } if$
+	    }
+	    { editor is.kanji
+		{" " * editor #2 "{vv }{ll}" format.name$ * }
+		{" and " * editor #2 "{vv }{ll}" format.name$ * }
+	      if$
+	    }
+	  if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      title is.kanji
+	{"  "} {"In "} if$
+    }
+    { "Volume" volume tie.or.space.connect
+      " of " *
+    }
+  if$
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+	{ series empty$
+	    { "need editor, key, or series for " cite$ * " to crossref " *
+	      crossref * warning$
+	      "" *
+	    }
+	    { series emphasize }
+	  if$
+	}
+	{ key * }
+      if$
+    }
+    { format.crossref.editor * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+	{ booktitle empty$
+	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
+	      crossref * warning$
+	      ""
+	    }
+	    { booktitle is.kanji
+		booktitle
+		{"In " booktitle emphasize * }
+	       if$
+	    }
+	  if$
+	}
+	{ "In " key * }
+      if$
+    }
+    { title is.kanji
+	{" " format.crossref.editor * }
+	{"In " format.crossref.editor * }
+      if$
+    }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ 
+%%%%
+  author  "author"  required.argument
+  title   "title"   required.argument
+  journal "journal" required.argument
+  year    "year"    required.argument
+%%%% jssst
+  volume  "volume"  
+  number  "number"  
+     required.and.or.argument
+  pages   "pages"   required.argument
+%%%%
+  output.bibitem 
+  format.authors ": " *
+  title output
+  crossref missing$
+    { journal emphasize output
+%     format.volume.number.year.pages output
+% date is always at the end. (H.N.)
+      format.vol.num.pages output
+      format.date output
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ 
+%%%%
+  author  "author"
+  editor  "editor"
+    required.exclusive.or.argument
+  title   "title"  required.argument
+  publisher "publisher" required.argument
+  year    "year" required.argument
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem
+  author empty$
+    { format.editors}
+    { format.authors}
+  if$
+  ": " *
+  title emphasize output
+  crossref missing$
+    { output.series.volume.number
+      publisher output
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {booklet}
+{
+%%%%
+  title   "title"   required.argument
+%%%% jssst
+  author  "author"  required.argument
+%%%%
+  output.bibitem
+  format.authors  ": " *
+  title output
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ 
+%%%%
+  author  "author"
+  editor  "editor"
+     required.exclusive.or.argument
+  title   "title"  required.argument
+  chapter "chapter"
+  pages   "pages"
+     required.and.or.argument
+  publisher  "publisher" required.argument
+  year       "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem 
+  author empty$
+    { format.editors}
+    { format.authors}
+  if$
+  ": " *
+  title emphasize output
+  crossref missing$
+    { output.series.volume.number
+      publisher output
+    }
+    { format.chapter.pages output
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+% format.date output
+  format.chapter.pages output
+  format.date output		% date is always at the end. (H.N.)
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{
+%%%%
+  author    "author"    required.argument
+  title     "title"     required.argument
+  booktitle "booktitle" required.argument
+  publisher "publisher" required.argument
+  year      "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem
+  format.authors ": " *
+  title output
+  crossref missing$
+    { format.in.ed.booktitle output
+      output.series.volume.number
+      publisher output
+      address output
+      format.edition output
+      format.chapter.pages output	% date is always at the end. (H.N.)
+      format.date output
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+% format.chapter.pages output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{
+%%%%
+  author    "author"    required.argument
+  title     "title"     required.argument
+  booktitle "booktitle" required.argument
+  year      "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem 
+  format.authors ": " *
+  title output
+  crossref missing$
+    { format.in.ed.booktitle output
+      output.series.volume.number
+      address output
+      organization output
+      publisher output
+%     format.date output
+      format.pages output
+      format.date output	% date is always at the end. (H.N.)
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{	
+%%%%
+  title   "title"    required.argument
+%%%% jssst
+  author   "author"
+  organization "organazaion"
+     required.exclusive.or.argument
+%%%%
+  output.bibitem
+  author empty$
+    { organization}
+    { format.authors}
+  if$
+  ": " *
+  title emphasize output
+  author empty$
+    'skip$
+    { organization output }
+  if$
+  address output
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{
+%%%%
+  author   "author"  required.argument
+  title    "title"   required.argument
+  school   "school"  required.argument
+  year     "year"    required.argument
+%%%%
+  output.bibitem
+  format.authors ": " *
+  title output
+  author empty$
+    { "Master's thesis" }
+    { author is.kanji
+        { "$B=$;NO@J8(B" }  
+        { "Master's thesis" }
+      if$
+    }
+  if$
+  format.thesis.type output.nonnull
+  school output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{
+%%%%
+%%%% jssst
+  author "author" required.argument
+  title  "title"  required.argument
+%%%%
+  output.bibitem
+  format.authors 
+  ": " *
+  title output
+  howpublished output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{
+%%%%
+  author   "author"  required.argument
+  title    "title"   required.argument
+  school   "school"  required.argument
+  year     "year"    required.argument
+%%%%
+  output.bibitem 
+  format.authors ": " *
+  title emphasize output
+  author empty$
+    { "PhD Thesis" }
+    { author is.kanji
+        { "$BGn;NO@J8(B" }
+        { "PhD Thesis" }
+      if$
+    }
+  if$
+  format.thesis.type output.nonnull
+  school output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{
+%%%%
+  title  "title"  required.argument
+  year   "year"   required.argument
+
+  optional.series.volume.number.argument
+%%%% jssst
+  editor  "editor"
+  organization "organization"
+      required.exclusive.or.argument 
+%%%%
+  output.bibitem 
+  editor empty$
+    { organization }
+    { format.editors }
+  if$
+  ": " *
+  title emphasize output
+  output.series.volume.number
+  address output
+  editor empty$
+    'skip$
+    { organization output }
+  if$
+  publisher output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{
+%%%%
+  author   "author"   required.argument
+  title    "title"    required.argument
+  institution "institution" required.argument
+  year     "year"     required.argument
+%%%%
+  output.bibitem
+  format.authors  ": " *
+  title output
+  format.tr.number output.nonnull
+  institution output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{
+%%%%
+  author   "author"   required.argument
+  title    "title"    required.argument
+  note     "note"     required.argument
+%%%%
+  output.bibitem
+  format.authors ": " *
+  title output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #1 'number.label :=
+  #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+  number.label #1 + 'number.label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/manycore.tex	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,48 @@
+\section{Many Core 上のプログムの特徴}
+従来の逐次型のプログラムでは、Cell といった Many Core の性能を
+十分に引き出すことは出来ない。
+
+\subsection{定常的な並列度の必要性}
+並列実行には Amdahl 則 \cite{amdahl} があり、
+プログラムの並列化率が低ければ、その性能を生かすことは出来ない。
+0.8 程度の並列化では、6 CPU でも
+3 倍程度の性能向上しか得られない (\figref{fig-amdahl}) 。
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.56]{figure/amdahl.pdf}
+    \caption{Amdahl 則}
+    \label{fig-amdahl}
+  \end{center}
+\end{figure}
+
+高い並列度ではなくとも、恒常的に並列度を維持する必要がある。
+このため、逐次型のプログラムの一部を並列化するという手法では不十分である。
+LSI などのハードウェアの場合は、演算の対象がもともと
+多量の演算とデータパスを持つので、並列計算の効果を
+定常的に得られることが多い。しかし、C 等で記述されたプログラムでは、
+for 文や配列のアクセス等に並列性が隠されてしまい、それを引き出すことが難しい。
+
+プログラム中の並列度は、主に二つの形で取り出すことが出来る。
+
+\begin{itemize}
+  \item データ並列 : 
+    配列や木の中の個々の要素に対して並列に実行する
+  \item パイプライン処理 : 
+    複数の逐次処理の隣同士を重ねて実行する
+\end{itemize}
+
+この二つを同時に用いることで、定常的な並列度を維持することが
+可能となることがある。パイプライン処理は、
+プログラム中で階層的に使われることが多い。
+
+データ並列とパイプライン処理を可能にするためには、
+プログラムとデータの適切な分割を行う必要がある。
+for 文、あるいは、木をだとって処理する個々のステートメントがプログラムの
+分割の対象となる。
+
+\subsection{デバッグ  }
+並列プログラムの特徴として、デバッグが難しいことも挙げられる。
+実行が非決定的(同じ状態で実行しても同じ結果が異なる)場合があり、
+バグの状態を再現することが難しい。
+また、個々の Core 上のデータを調べる必要もある。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/task_manager.tex	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,231 @@
+\section{Task Manager} \label{sec:tm}
+Task Manager は、Task と呼ばれる分割された各プログラムを管理する。
+Task の単位はサブルーチンまたは関数とし、Task 同士の依存関係を考慮しながら
+実行していく。
+
+現在実装されている Task Manager の API を \tabref{tab:tm-api} に示す。
+
+\begin{table}[htbp]
+  \caption{Task Manager API} \label{tab:tm-api}
+  \hbox to\hsize{\hfil
+  \begin{tabular}{c|l} \hline \hline
+    create\_task & Task を生成する \\ \hline
+    add\_inData   & Task への入力データのアドレスを追加 \\ \hline
+    add\_outData  & Task からのデータ出力先アドレスを追加 \\ \hline
+    add\_param    & Task のパラメータ (32 bits) \\ \hline
+    wait\_for    & Task の依存関係の考慮 \\\hline
+    set\_cpu     & Task を実行する CPU の設定 \\ \hline
+    spawn        & Task を実行 Task Queue に登録する \\ \hline
+    run          & 実行 Task Queue の実行 \\ \hline
+  \end{tabular}\hfil}
+\end{table}
+
+以下に Task Manager を使った記述例を示す。
+
+{\small
+\begin{verbatim}
+
+char sendStr[STRSIZE] = "Hello, World";
+
+int
+main(void)
+{
+    TaskManager *manager;
+    Task *task;
+    int length = sizeof(char)*STRSIZE;
+
+    /**
+     * Constructor
+     * @param CPU_NUM: 使用する CPU の数
+     */
+    manager = new TaskManager(CPUNUM);
+
+    // TASK_RUN = TaskRun::run に対応する ID
+    task = create_task(TASK_RUN);
+
+    /**
+     * タスクの入出力データの設定
+     * @param[1]: address of data
+     * @param[2]: size of data
+     */
+    task->add_inData(sendStr,length);
+    task->add_outData(sendStr,length);
+    
+    task->spawn();
+
+    printf("before: %s\n", sendStr);
+
+    manager->run();
+
+    printf("after : %s\n", sendStr);
+
+    return 0;
+}
+
+TaskRun::run(void *rbuf, void *wbuf)
+{
+    // add_inData で指定したアドレスのデータを取得
+    // recvStr = "Hello, World"
+    char *recvStr = (char*)get_input(rbuf, 0);
+
+    // fixStr にあるデータが、
+    // Task 終了後、add_outData で指定した
+    // sendStr に書き込まれる
+    char *fixStr = (char*)get_input(wbuf, 0);
+
+    strcpy(fixStr, recvStr);
+    fixStr[0] = 'D';
+    fixStr[3] = 'E';
+}
+
+// 実行結果
+before: Hello, World
+after: DelEo, World
+
+\end{verbatim}
+}
+
+\subsection{Task の定義} \label{sec:tm-task}
+タスクの定義を以下に示す。
+
+{\small
+\begin{verbatim}
+
+class Task {
+public:
+    int command;
+    ListData inListData;  // list of input data
+    ListData outListData; // list of output area
+    Task* self;
+    int param_size;
+    int param[3];
+};
+
+class HTask : public Task {
+public:
+    // List of task waiting for me
+    TaskQueuePtr wait_me;
+    // List of task for which I am waiting
+    TaskQueuePtr wait_i;
+
+    CPU_TYPE cpu_type;
+};
+
+\end{verbatim}
+}
+
+Task クラスは、各 Core が実行するタスクの単位オブジェクトである。
+各 Core は inListData にあるアドレス(メインメモリ)からデータを取得し、
+command に対応するコードを実行し、結果を outListData にあるアドレスに送信する。
+これらの処理はパイプラインに沿って動作する (sec:\ref{sec:tm-scheduler})。
+各 Core には Task の集合である TaskList を送る。
+
+HTas クラスは、TaskManager で管理する実行前のタスクオブジェクトである。
+wait\_me, wait\_i はタスク依存の条件 (sec:\ref{sec:tm-depend}) に、
+cpu\_type は実行する CPU の切り替え (sec:\ref{sec:tm-cpu}) に用いる。
+
+\subsection{スケジューラ} \label{sec:tm-scheduler}
+TaskManager のスケジューラを以下に示す。
+
+\begin{verbatim}
+
+SchedTaskBase *task1, *task2, *task3;
+
+do {
+    task3->write();
+    task2->exec();
+    task1->read();
+
+    taskTmp = task3;
+    task3 = task2;
+    task2 = task1;
+    task1 = task1->next(taskTmp);
+} while (task1);
+
+\end{verbatim}
+
+TaskList にある Task が全て終了し、メインスレッドから
+終了のメッセージを受け取ったら、while 文を抜ける。
+
+SchedTaskBase クラスは、スケジューラによって実行されるオブジェクトである。
+スケジューラ自身のタスクとして、以下のようなタスクがある。
+これらのオブジェクトは全て SchedTaskBase を継承している。
+
+\begin{itemize}
+\item SchedMail: メインスレッドからのメッセージを取得する
+\item SchedTaskList: TaskList を取得する
+\item SchedTask: Task を実行する
+\item SchedExit: Core の実行を終了する
+\item SchedNop: 何も行わない
+\end{itemize}
+
+ユーザがタスクを記述する場合、SchedTask を継承し、exec() 内の run() に
+タスクの処理を記述する。
+
+\subsection{タスク依存} \label{sec:tm-depend}
+Task Manager はタスク依存を解決する機能を持っている。
+以下は記述例である。
+
+\begin{verbatim}
+
+// task2 は task1 が終了してから開始する
+task2->wait_for(task1);
+
+\end{verbatim}
+
+タスク依存が満たされたタスクを ActiveQueueに入れる。
+各 Core は ActiveQueue から処理するコードとデータを取得し、
+自律的に実行する。終了したタスクはメインスレッドへ終了のコマンドを
+発行紙、メインスレッドはそれを見て WaitQueue のタスクを調べ、
+タスク依存を満たしたタスクを ActiveQueue に入れる。
+
+\subsection{タスクを実行させる Core の選択} \label{sec:tm-cpu}
+TaskManager の \verb|set_cpu()| により、タスクを
+どの Core で実行するか選択する事が出来る。
+
+\begin{verbatim}
+
+// Core 1 で実行する
+task->set_cpu(CPU_1);
+
+// どの Core で実行してもいい
+task->set_cpu(CPU_ANY);
+
+\end{verbatim}
+
+メインスレッド内でもタスクを実行する事が可能なため、これを用いる事により、
+環境依存によるプログラム変換はタスクの部分だけとなり、全体の変換は必要ない。
+
+このことはデバッグにおいても有効であると言える。
+デバッグが困難な並列プログラムの前に、まずはメインスレッド単体で動く
+シーケンシャルプログラムを記述する。
+仕様やアルゴリズムの正しさを確認できたら、\verb|set_cpu| により
+各 Core へタスクを渡し、並列プログラムへ移行する。
+デバッグに関する詳細は第 \ref{sec:debug} 節で述べる。
+
+\subsection{メインスレッドと各 Core 間との同期}
+メインスレッドと各 Core 間では、32 ビットメッセージの
+交換により同期を行っている。これは Cell の機能の一つである、
+Mailbox を元に実装した。
+
+Mailbox とは SPE の MFC 内の FIFO キューであり、
+PPE と SPE 間の 32 ビットメッセージの交換に用いられる \cite{mailbox} 。
+通常、スレッド間で待ち合わせを行うと処理が止まってしまい、
+並列度が下がってしまうことがあるが、Mailbox は
+メッセージ交換なので待ち合わせを避けることが可能である。
+
+\figref{fig:sync} は、Cerium における
+PPE-SPE 間のメッセージのやりとりを表している。
+メインスレッドでは、各 SPE の起動と終了、そしてタスクの管理を行っている。
+そして Outbound Mailbox (SPE $\rightarrow$ PPE メッセージ) を見て、
+その内容に対応する処理を PPE 上で行う。
+対処した結果を Inbound Mailbox (PPE $\rightarrow$ SPE メッセージ) で伝え、
+受け取った SPE はタスクを再実行する。
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.353]{figure/sync.pdf}
+    \caption{PPE, SPE threads}
+    \label{fig:sync}
+  \end{center}
+\end{figure}